MIN/MAX-Werte Exposed Filter - Field Collection
am 01.09.2017 - 11:49 Uhr in
Hallo,
ich arbeite mit Better Exposed Filter und lasse diese mit dem jQuery-Slider anzeigen. Die Min-/ und Max-Werte schreibe ich mir mit diesem Code in die Filter:
<?php
// MAX
$max_query = db_query('SELECT MAX(field_preis2_value) AS max_flaechenpreis, entity_id AS eid FROM field_data_field_preis2 LEFT JOIN node AS n ON entity_id = n.nid WHERE n.status =1;');
$record = $max_query->fetchAssoc();
$max=floatval($record['max_flaechenpreis']);
$settings['field_preis2_value']['slider_options']['bef_slider_max'] = $max;
//MIN
$min_query = db_query('SELECT MIN(field_preis2_value) AS min_flaechenpreis, entity_id AS eid FROM field_data_field_preis2 LEFT JOIN node AS n ON entity_id = n.nid WHERE n.status =1;');
$record = $min_query->fetchAssoc();
$min=floatval($record['min_flaechenpreis']);
$settings['field_preis2_value']['slider_options']['bef_slider_min'] = $min;
?>
Nun habe ich neuerdings das Modul Field Collection im Einsatz und wollte die Feld-Werte einger Field Collection Felder mit dem gleichen Code wie oben laden. Es werden zwar Werte aus der richtigen Datenbanktabelle geladen, allerdings nicht die wirklichen Min-/ und Max-Werte.
Ich kann mir das nur erklären, dass es sich hier um Field Collection Felder handelt und nicht -wie bisher- um normale Felder. In der Datenbanktabelle sehe ich, dass meine normalen Felder in der Spalte "entity_type" "node" stehen haben und meine Field Collection Felder "field_collection_item". Da im obigen Code "node" verwendet wird, liegt da vielleicht der Hase im Pfeffer.
Ich habe leider nur wenig Programmier- und SQL-Erfahrung und kann das Problem nicht beheben. Hat von euch jemand eine Idee, wie ich den Code anpassen müsste, damit das sauber funktioniert?
Grüße, Thomas
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi,FieldColleciions sind
am 02.09.2017 - 10:25 Uhr
Hi,
FieldColleciions sind keine normalen Felder, sondern Entities und werden normalerwiese über entity_load,entity_metadata_wrapper oder field_get_items geladen.
Schau mal hier:
https://www.drupal.org/node/1477202
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo, danke für deine Hilfe.
am 02.09.2017 - 12:14 Uhr
Hallo,
danke für deine Hilfe. Ich habe vielleicht die falschen Befriffe verwendet. Also ich versuche nicht die Field Collection zu laden, sondern ein paar Felder innerhalb der Field Collection. Das sind doch normale Felder, oder? Zumindest sehen sie in der Datenbank so aus. Bis auf die oben beschriebene Tatsache, dass anstelle "Node" in der Spalte "entity type" "field collection item" steht. Könnte das der Grund sein, dass die Werte nicht richtig geladen werden?
Hallo,nein eine
am 02.09.2017 - 13:16 Uhr
Hallo,
nein eine FieldColecction ist kein normales Feld sindern eine Kollektion aus Feldern
und muss dem entsprechend anders geladen.
Ja, das könnte der Grund sein, denn Du musst eine FieldCollection laden und keinen Node.
Der Node enthält nur die id der Fieldcollection, mit der du die Felder dann laden kannst.
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
hmm...irgendwie komme ich
am 05.09.2017 - 06:17 Uhr
hmm...irgendwie komme ich hier nicht weiter. Ich habe das Prinzip, dass eine Field Collection kein normales Feld ist, verstanden. Nur weiß ich nicht, wie ich meinen Code anpassen könnte, damit die Werte aus den Feldern der Field Collection korrekt geladen werden. Wie gesagt, es fehlen mir leider die Programmierkenntnisse, um den Fehler zu beheben. Hat vielleicht jemand einen Hinweis?
Hi nochmal.So sieht das in
am 08.09.2017 - 13:10 Uhr
Hi nochmal.
So sieht das in Code aus wenn man eine FieldCollection in Code laden
und die Felder in dieser Collection auswerten möchte:
//Get PROPERTY DESCRIPTION data from field collection.
$property_description = $node->field_property_description[LANGUAGE_NONE][0][‘value’];
// here we are loading field collection
$pd_item = field_collection_item_load($property_description);
//getting field collection item value.
$pd_item_values = array(
‘scheme_type’ => $pd_item->field_scheme_type[LANGUAGE_NONE][0][‘value’],
‘area’ => $pd_item->field_area[LANGUAGE_NONE][0][‘value’],
‘property_type’ => $pd_item->field_property_type[LANGUAGE_NONE][0][‘value’],
‘budget’ => $pd_item->field_budget[LANGUAGE_NONE][0][‘value’],
);
//PROPERTY DESCRIPTION ENDS.
Das Feld
$pd_item
ist eine FieldCollection und kein Wert eines Feldes!!
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Robert,vielen Dank für
am 08.09.2017 - 08:38 Uhr
Hallo Robert,
vielen Dank für deine Hilfe hiermit. Ich habe deinen Code so angewendet:
<?php
$fc_ge = $node->field_data_field_test[LANGUAGE_NONE][0][‘value’];
$ge_item = field_collection_item_load($fc_ge);
$ge_item_values = array(
field_data_field_preis2 => $ge_item->field_preis2_value[LANGUAGE_NONE][0][‘value’];
$settings['field_preis2_value']['slider_options']['bef_slider_max'] = $ge_item_values;
?>
field_data_field_test
= Field Collectionfield_data_field_preis2
= Feld innerhalb der Field Collection, dessen Wert ich ausgeben möchtefield_preis2_value
= Spalte mit den Werten ausfield_data_field_preis2
Es funktioniert noch nicht. Kannst du einen Fehler in meinem Code sehen?
Wäre es nicht auch möglich meinen ursprünglichen Code, den ich für die "normalen" Felder verwende, anzupassen:
$max_query = db_query('SELECT MAX(field_mietpreis_value) AS max_mietpreis, entity_id AS eid FROM field_data_field_mietpreis LEFT JOIN node AS n ON entity_id = n.nid WHERE n.status =1;');
Ich möchte nämlich nur die Feldwerte laden, deren übergeordnete Nodes veröffentlicht sind. Könnte man das nicht auch mit einer zweiten LEFT JOIN bewerkstelligen? Sorry für meine Anfängerfragen, ich versuche mir die Basics beizubringen.
Danke und Grüße
Thomas
Hi,$ge_item =
am 08.09.2017 - 10:03 Uhr
Hi,
$ge_item = field_collection_item_load($fc_ge);
$ge_item ist nicht ein Feld sondern MEHERE, also musst Du mit einer Loop durch alle Felder!
Da werden werden Felder einer FielCollection geladen.
function field_collection_item_load($item_id, $reset = FALSE) {
$result = field_collection_item_load_multiple(array($item_id), array(), $reset);
return $result ? reset($result) : FALSE;
}
Probier es mal mit einem loop durch $ge_item:
foreach($ge_item as $item){
//dpm($item);
//oder var_dump($item);
}
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Ohje, jetzt blick ich nicht
am 08.09.2017 - 12:44 Uhr
Ohje, jetzt blick ich nicht mehr durch. Welchen Bereich muss ich entsprechend deinem Code austauschen?
Ist ein SQL Query nicht möglich? PHP verstehe ich nur sehr rudimentär.
Hi,ich habe es doch zeimlich
am 08.09.2017 - 13:15 Uhr
Hi,
ich habe es doch zeimlich genau beschrieben:
$ge_item ist kein Wert eines Feldes sondern eine FieldCollection.
Du kannst nicht einfach auf einen Wert von ge_item zugreifen,
sondern Du musst eine Schleife durchlaufen, auch wenn diese FieldCollection
nut ein Feld mit einem Wert hat!
$ge_item = field_collection_item_load($fc_ge);
foreach($ge_item as $item){
//dpm($item); //Wert ausgeben mit dpm
//oder var_dump($item); //Wert ausgeben mit var_dump
}
Gruss
Robert
btw. Der Code mit dem MIN MAX kommt mir bekannt vor. ich glaube da habe ich mal demjenigen hier weitergeholfen, der den Code geschreiben hat! ;-)
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)