[gelöst] Allowed Values einer Text-Liste mit PHP generieren
Eingetragen von dasmoermel (30)
am 11.10.2011 - 15:33 Uhr in
am 11.10.2011 - 15:33 Uhr in
Hallöchen!
Habe folgendes als Allowed Values PHP Code zu stehen:
<?php
$result = db_query("SELECT field_data_field_commerce_date.`field_commerce_date_value` FROM field_data_field_commerce_date WHERE field_data_field_commerce_date.`entity_id` =8";
$items = array();
foreach ($result as $row) {
$items[] = $row;
}
?>
Die SQL- Abfrage selbst funzt, aber die zu befüllende Liste wird leider nicht befüllt.
Muss zu meiner Verteidigung sagen dass ich noch nicth sonderlich viel mit PHP gearbeitet habe :(
Wäre schon wenn Ihr sachdienliche hinweise für mich hättet.
Beste Grüße, Marc
- Anmelden oder Registrieren um Kommentare zu schreiben
Probier's mal damit: <?php
am 11.10.2011 - 15:56 Uhr
Probier's mal damit:
<?php
$result = db_query("SELECT f.`field_commerce_date_value` AS valueField FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =8";
$items = array();
while ($row = db_fetch_object($result)) {
$items[] = $row->valueField;
}
?>
Hej! Danke für deine
am 11.10.2011 - 17:18 Uhr
Hej!
Danke für deine Antwort.
Leider funktioniert das auch nicht. :(
Mit folgendem Code:<?php
am 11.10.2011 - 19:05 Uhr
Mit folgendem Code:
<?php
$sql = "SELECT f.`field_commerce_date_value` AS valueField FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =9";
$res = db_query($sql);
$items = array();
foreach ($res as $row) {
$items[] = $row->valueField;
}
return $items;
?>
Sieht es jetzt schon mal so aus:
Also Werte sind anscheinend vorhanden, aber sie werden nicht angezeigt.
Was mache ich falsch?
Hoppla, hatte D6-Syntax
am 11.10.2011 - 19:19 Uhr
Hoppla, hatte D6-Syntax geschrieben, sorry.
Lass dir doch mal $row ausgeben:
<?php
$sql = "SELECT f.`field_commerce_date_value` AS valueField FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =9";
$res = db_query($sql);
$items = array();
foreach ($res as $row) {
drupal_set_message('<pre>' . print_r($row, 1) . '</pre>');
}
return $items;
?>
Dann dürftest du sehen, was für Eigenschaften $row jeweils hat.
<?php$sql = "SELECT
am 11.10.2011 - 19:49 Uhr
<?php
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =9";
$res = db_query($sql);
$items = array();
foreach ($res as $row) {
$items[] = $row->valuefield;
}
return $items;
?>
Jo... funzt... danke dir!
Der Fehler war, wie so oft, die Gross und Kleinschreibung ;)
Jetzt würde ich nur noch ganz gerne:
- das Datumsformat ändern
- alle Datumsangaben, die in der Vergangenheit liegen, ausfiltern
- die entity_id auf das Prodkt dynamisch auslesen
Irgendeine Idee?
In vb.NET könnte ich das, nur leider nicht in PHP :(
Wie sieht denn z. B. ein
am 11.10.2011 - 20:31 Uhr
Wie sieht denn z. B. ein solcher Datums-Wert aus? Und welches Format willst du haben?
die entity_id auf das Prodkt dynamisch auslesen
Was genau meinst du damit?
Zitat:Wie sieht denn z. B.
am 11.10.2011 - 20:48 Uhr
Wie sieht denn z. B. ein solcher Datums-Wert aus? Und welches Format willst du haben?
Datumswert habe ich jetzt fast schon selbst hinbekommen, ist mySQL - Format yyyy-mm-dd hh:mm:ss und ich möchte dd.mm.yyyy - hh:mm.
Spiele da gerade ein bissel mit der Explod- Funktion rum.
Geht aber evtl. auch besser?
die entity_id auf das Prodkt dynamisch auslesen
Ich habe momentan ja folgenden SQL-String
SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =9
Die entity_id in der WHERE- Klausel ist momentan zu Testzwecken noch auf einen festen Wert gesetzt.
Gibt es eine greifbare Variable in Drupal mit der ich die Entity_ID für das gerade angesehene Produkt herausbekomme?
Also quasi für das Produkt, wo gerade die Allowed Values PHP durchlaufen wird?
Zitat: Geht aber evtl. auch
am 11.10.2011 - 21:12 Uhr
Geht aber evtl. auch besser?
Auf jeden Fall, dafür gibt's
date()
:<?php
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` =9";
$res = db_query($sql);
$items = array();
foreach ($res as $row) {
$datumAlt = $row->valuefield;
$datumNeu = date("d.m.Y H:i", strtotime($datumAlt) );
$items[] = $datumNeu;
}
return $items;
?>
Die entity_id in der WHERE- Klausel ist momentan zu Testzwecken noch auf einen festen Wert gesetzt.
Gibt es eine greifbare Variable in Drupal mit der ich die Entity_ID für das gerade angesehene Produkt herausbekomme?
Also quasi für das Produkt, wo gerade die Allowed Values PHP durchlaufen wird?
Also dynamisch geht's auf jeden Fall. Mal angenommen, du hast eine Variable
$eid
, in der die ID steht, dann könnte die Abfrage so aussehen:<?php
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` = :entityId";
$res = db_query($sql, array(':entityId' => $eid) );
?>
Aber dazu benötigst du natürlich erstmal die ID... Hast du bei den Einstellungen für die Allowed Values irgendwas stehen, welche Variablen du in PHP zur Verfügung hast?
Zitat: Hast du bei den
am 11.10.2011 - 21:25 Uhr
Hast du bei den Einstellungen für die Allowed Values irgendwas stehen, welche Variablen du in PHP zur Verfügung hast
Nein, leider nich.
Aber irgendwie muss da ja ein Rankommen sein.
Das mit dem Datum funktioniert bestens! Danke!
Probier mal, ob das
am 11.10.2011 - 21:56 Uhr
Probier mal, ob das geht:
<?php
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` = :entityId";
$res = db_query($sql, array(':entityId' => $node->nid) );
$items = array();
foreach ($res as $row) {
$datumAlt = $row->valuefield;
$datumNeu = date("d.m.Y H:i", strtotime($datumAlt) );
$items[] = $datumNeu;
}
return $items;
?>
funktioniert leider nicht
am 11.10.2011 - 22:20 Uhr
funktioniert leider nicht :(
Es kommen folgende Fehlermeldungen:
Notice: Undefined variable: node in eval() (Zeile 2 von .../sites/all/modules/cck/cck.module(304) : eval()'d code).
Notice: Trying to get property of non-object in eval() (Zeile 2 von .../sites/all/modules/cck/cck.module(304) : eval()'d code).
<?php global $nid;$sql =
am 12.10.2011 - 01:35 Uhr
<?php
global $nid;
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id` = :entityid";
$res = db_query($sql, array(':entityid' => $nid) );
$items = array();
foreach ($res as $row) {
$timestamp = time();
$datumsql = $row->valuefield;
$datumunix = date("U", strtotime($datumsql ) );
If ($datumunix > $timestamp)
{
$datumger = date("d.m.Y H:i", strtotime($datumsql ) );
$items[] = $datumger;
}
}
return $items;
?>
Das ist mein jetziger Ansatz, aber irgendwie bekomme ich die NodeID einfach nicht.
Habe mir $nid schon mal ausgeben lassen, aber der Wert war leer.
Wo liegt das Problem?
Wuuuuuhuuu
am 12.10.2011 - 11:54 Uhr
Jawoll, hab es endlich!
Hier mal meine AllowedValuesPHP, falls es jemanden interessiert:
<?php
//node ID setzen und ProductID des Commerce Produktes finden
$nid = arg(1);
drupal_set_message('<pre>' . print_r($nid, 1) . '</pre>');
$sql = "SELECT t.`field_commerce_ref_product_id` AS eid FROM {field_data_field_commerce_ref} t WHERE t.`entity_id` = :nodeid";
$res = db_query($sql, array(':nodeid' => $nid) );
foreach ($res as $row)
{
$pid = $row->eid;
drupal_set_message('<pre>' . print_r($pid, 1) . '</pre>');
}
// Auslesen des Datumsfeldes
$sql = "SELECT f.`field_commerce_date_value` AS valuefield FROM {field_data_field_commerce_date} f WHERE f.`entity_id`= :productid";
$res = db_query($sql, array(':productid' => $pid) );
//Tabelle durchlaufen
$items = array();
foreach ($res as $row)
{
drupal_set_message('<pre>' . print_r($row->valuefield, 1) . '</pre>');
//Aktuelles Datum/Zeit ermitteln
$timestamp = time();
$datumsql = $row->valuefield;
// Ausgelesenes Datum auf UNIX- Timestamp setzen
$datumunix = date("U", strtotime($datumsql ) );
// Alle bereits vergangenen Daten ausfiltern
If ($datumunix > $timestamp)
{
// Datumsformat auf deutsches Format
$datumger = date("d.m.Y H:i", strtotime($datumsql ) );
// Array befüllen
$items[] = $datumger;
}
}
return $items;
?>
Vielen Dank nochmal an dich, Exterior!
Hast mir echt weitergeholfen!
Super :) Dann editiere doch
am 12.10.2011 - 12:30 Uhr
Super :)
Dann editiere doch bitte noch deinen ersten Beitrag oben und schreibe "[gelöst]" vor den Titel.