[gelöst]Nur veröffentlichte Min/Max-Werte im Exposed Filter Slider
am 03.11.2015 - 15:06 Uhr in
Hallo Community,
ich habe eine Ansicht/View mit mehreren Slider-Filter (mit Modul Better Exposed Filter), die standardmäßig die Min-/Max-Werte bestimmter Felder enthalten.
Die Min-/Max-Werte ziehe ich mir durch diesen Code im template.php:
function newbusiness_better_exposed_filters_settings_alter(&$settings) {
// MAX price
$max_query = db_query('SELECT MAX(field_grundst_ckspreise_value) as max_preis FROM {field_data_field_grundst_ckspreise}');
$record = $max_query->fetchAssoc();
$max = floatval($record['max_preis']);
$settings['field_grundst_ckspreise_value']['slider_options']['bef_slider_max'] = $max;
// MIN price
$min_query = db_query('SELECT MIN(field_grundst_ckspreise_value) as min_preis FROM {field_data_field_grundst_ckspreise}');
$record = $max_query->fetchAssoc();
$min= floatval($record['min_preis']);
$settings['field_grundst_ckspreise_value']['slider_options']['bef_slider_min'] = $min;
}
Zu meiner Frage: Die Felder, aus denen die Min-/Max-Werte gezogen werden, sind Bestandteil des Nodetyps "Unternehmensprofil". Ein Nutzer kann sein Unternehmensprofil veröffentlichen, indem er alle Pflichtfelder befüllt. Sind nicht alle Pflichtfelder befüllt, ist das eigene Unternehmensprofil nicht veröffentlicht. In meiner oben dargestellten DB-Abfrage wird allerdings nicht unterschieden zwischen "veröffentlichter Node" und "nicht-veröffentlichter Node". Wie kann ich es schaffen, dass bei den Min-/Max-Werten im Slider immer nur Werte von veröffentlichten Nodes herangezogen werden? Felder (bzw. Werte) von nicht-veröffentlichten Nodes sollen ignoriert werden.
Mir fehlen hierzu leider die Programmierkenntnisse. Welcher zusätzliche Befehl müsste ich in meinen Code oben eingeben?
Danke und Grüße
Thomas
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo, Du musst bei beiden
am 04.11.2015 - 10:21 Uhr
Hallo,
Du musst bei beiden Queries die node Tabelle joinen, um den node status zu bekommen.
Hier ein Beispiel(habs nicht getestet):
SELECT MIN(field_grundst_ckspreise_value) as min_preis FROM {field_data_field_grundst_ckspreise}') LEFT JOIN node AS n ON min_preis.entity_id=n.nid WHERE n.status=1
Grüsse
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Danke, Robert. Kann ich den
am 04.11.2015 - 11:19 Uhr
Danke, Robert. Kann ich den Code genau wie von dir geschrieben versuchen, oder muss ich da noch etwas anpassen?
Hallo Thomas,es sollte so
am 04.11.2015 - 13:50 Uhr
Hallo Thomas,
es sollte so funktionieren, probiers es am besten in phpmyadmin aus.
Grüsse
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Jetzt hatte ich endlich Zeit,
am 09.11.2015 - 08:44 Uhr
Jetzt hatte ich endlich Zeit, das zu testen. Ich habe deinen Code wie folgt eingefügt:
$min_query = db_query('SELECT MIN(field_gewerbesteuerh_he_value) as min_gewerbesteuer FROM {field_data_field_gewerbesteuerh_he} LEFT JOIN node AS n ON min_gewerbesteuer.entity_id=n.nid WHERE n.status=1');
$record = $min_query->fetchAssoc();
$min=floatval($record['min_gewerbesteuer']);
$settings['field_gewerbesteuerh_he_value']['slider_options']['bef_slider_min'] = $min;
Ich bekomme dann auf meiner Webseite diese Fehlermeldung:
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'min_gewerbesteuer.entity_id' in 'on clause': SELECT MIN(field_gewerbesteuerh_he_value) as min_gewerbesteuer FROM {field_data_field_gewerbesteuerh_he} LEFT JOIN node AS n ON min_gewerbesteuer.entity_id=n.nid WHERE n.status=1; Array ( ) in newbusiness_better_exposed_filters_settings_alter() (Zeile 220 von /sites/all/themes/newbusiness/template.php).
Habe ich da einen Fehler drin?
Danke und Gruß
Thomas
Hallo
am 09.11.2015 - 09:38 Uhr
Hallo Thomas,
min_gewerbesteuer ist anscheinend nur ein Wert (field_gewerbesteuerh_he_value) und keine ganze Reihe der Tabelle.
Die entity_id müsste in field_data_field_gewerbesteuerh_he zu finden sein.
Probier es mal so:
SELECT MIN(field_gewerbesteuerh_he_value) AS min_gewerbesteuer,entity_id AS eid FROM {field_data_field_gewerbesteuerh_he} LEFT JOIN node AS n ON eid=n.nid WHERE n.status=1;
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Robert, danke für deine
am 10.11.2015 - 20:12 Uhr
Hallo Robert,
danke für deine ausdauernde Hilfe! Sobald ich aber den View aufrufe, erscheint nun eine ähnliche Meldung:
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'eid' in 'on clause': SELECT MIN(field_gewerbesteuerh_he_value) AS min_gewerbesteuer,entity_id AS eid FROM {field_data_field_gewerbesteuerh_he} LEFT JOIN node AS n ON eid=n.nid WHERE n.status=1; Array ( ) in newbusiness_better_exposed_filters_settings_alter() (Zeile 220 von /sites/all/themes/newbusiness/template.php).
Hätte ich in deinem Code noch etwas anpassen müssen, weil du schreibst:
Die entity_id müsste in field_data_field_gewerbesteuerh_he zu finden sein
VG
Thomas
Hallo Thomas poste mal die
am 11.11.2015 - 09:43 Uhr
Hallo Thomas
poste mal die Struktur der Tabelle field_data_field_gewerbesteuerh_he.
Dort müsste die referenzierte entitiy_id oder nid zu finden sein.
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Ich habe die Tabelle in
am 11.11.2015 - 10:25 Uhr
Ich habe die Tabelle in phpmyadmin exportiert und so sieht sie aus:
<?xml version="1.0" encoding="UTF-8"?>
<!-- - phpMyAdmin XML Dump - version 4.0.7 - http://www.phpmyadmin.net - - Host: 127.0.0.1:3307 - Erstellungszeit: 11. Nov 2015 um 10:21 - Server Version: 5.5.45-3 - PHP-Version: 5.3.28 -->
-<pma_xml_export xmlns:pma="http://www.phpmyadmin.net/some_doc_url/" version="1.0">
<!-- - Structure schemas -->
-<pma:structure_schemas>-<pma:database charset="utf8" collation="utf8_unicode_ci" name="usrdb_mybfkbru1"><pma:table name="field_data_field_gewerbesteuerh_he"> CREATE TABLE `field_data_field_gewerbesteuerh_he` ( `entity_type` varchar(128) NOT NULL DEFAULT '' COMMENT 'The entity type this data is attached to', `bundle` varchar(128) NOT NULL DEFAULT '' COMMENT 'The field instance bundle to which this row belongs, used when deleting a field instance', `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'A boolean indicating whether this data item has been deleted', `entity_id` int(10) unsigned NOT NULL COMMENT 'The entity id this data is attached to', `revision_id` int(10) unsigned DEFAULT NULL COMMENT 'The entity revision id this data is attached to, or NULL if the entity type is not versioned', `language` varchar(32) NOT NULL DEFAULT '' COMMENT 'The language for this data item.', `delta` int(10) unsigned NOT NULL COMMENT 'The sequence number for this data item, used for multi-value fields', `field_gewerbesteuerh_he_value` decimal(10,0) DEFAULT NULL, PRIMARY KEY (`entity_type`,`entity_id`,`deleted`,`delta`,`language`), KEY `entity_type` (`entity_type`), KEY `bundle` (`bundle`), KEY `deleted` (`deleted`), KEY `entity_id` (`entity_id`), KEY `revision_id` (`revision_id`), KEY `language` (`language`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Data storage for field 86 (field_gewerbesteuerh_he)'; </pma:table></pma:database></pma:structure_schemas>
<!-- - Datenbank: 'usrdb_mybfkbru1' -->
-<database name="usrdb_mybfkbru1">
<!-- Tabelle field_data_field_gewerbesteuerh_he -->
-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">88</column><column name="revision_id">88</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">365</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">89</column><column name="revision_id">89</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">360</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">91</column><column name="revision_id">91</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">400</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">92</column><column name="revision_id">92</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">310</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">93</column><column name="revision_id">93</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">340</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">94</column><column name="revision_id">94</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">240</column></table>-<table name="field_data_field_gewerbesteuerh_he"><column name="entity_type">node</column><column name="bundle">profil</column><column name="deleted">0</column><column name="entity_id">95</column><column name="revision_id">95</column><column name="language">und</column><column name="delta">0</column><column name="field_gewerbesteuerh_he_value">360</column></table></database></pma_xml_export>
Kannst du damit etwas anfangen?
Danke und Gruß!
Hallo,ja ich habe die
am 11.11.2015 - 10:39 Uhr
Hallo,
ja ich habe die Tabelle schnell bei mir erstellt und folgenden Query ausprobiert:
SELECT MIN( field_gewerbesteuerh_he_value ) AS min_gewerbesteuer, entity_id AS eid FROM field_data_field_gewerbesteuerh_he LEFT JOIN node AS n ON entity_id = n.nid WHERE n.status =1;
Dieser Query liefert Dir min_gewerbesteuer und eid zurück, wenn der node status 1 ist.
Grüsse
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Robert, sorry für die
am 25.11.2015 - 22:20 Uhr
Hallo Robert,
sorry für die späte Rückmeldung. Ich erstelle meine Webseite nicht hauptberuflich, daher komme ich nicht so oft dazu. Deine Lösung hat wunderbar funktioniert.
Ich danke Dir vielmals für deine Hilfe!
Grüße
Thomas