cck time output - php-befehl gesucht
Eingetragen von Mystify (232)
am 06.04.2009 - 17:18 Uhr in
am 06.04.2009 - 17:18 Uhr in
hi,
ich hab mir gerade das cck time (http://drupal.org/project/cck_time) modul gedownloaded und etwas angepasst.
unter anderem habe ich auch eine leer-auswahl hinzugefügt
nach diesem patch: http://drupal.org/files/issues/cck_time.module.patch
das problem ist jetzt, dass man wenn man die leer-auswahl nutzt, man folgegende ausgabe bekommt:
-1:-1
erscheinen soll aber z.B. closed
wen kann man das jetzt erreichen, vielleicht durch php? bin leider nicht wirklich der pro in sachen php, aber gibt es vielleicht ein befehl, den man in einer theme datein (node-NODETYP.tpl.php) einfügen könnte, der automatisch
-1:-1 durch closed
ersetzt?
danke
- Anmelden oder Registrieren um Kommentare zu schreiben
für alle die kein bock
am 06.04.2009 - 17:49 Uhr
für alle die kein bock haben das modul und den patch zu installieren hier die problematik:
das feld hat den namen field_zeiten
dieses feld hat zwei selectlisten, einmal für die stunden($hours) und einmal für die minuten($minutes).
beide haben mittels:
$hours[-1] = '--';
$minutes[-1] = '--';
die auswahl
--
als ersten wert erhalten.
die zeilen im theme sehen so aus
<?php foreach ((array)$field_zeit as $item) { ?>
<?php print $item['view'] ?>
<?php } ?>
wenn man diese jetzt auswählt, erhält man folgende ausgabe:
-1:-1
den doppelpunkt erhält man aufgrund von
$node_field[0]['value'] = $node_field['hour'] .':'. $node_field['minute'];
Also im Prinzip ist das
am 06.04.2009 - 17:50 Uhr
Also im Prinzip ist das nicht so schwierig. Es wird Dir sicherlich aber das Modul Content Template dabei helfen, weil dann musst Du keine Datei node-NODETYPE.tpl.php anlegen und für das was Du vorhast und Deinem Kenntnisstand von PHP wäre es eventuell sogar sehr hilfreich.
Nach installieren ist unter http://www.deinedomain.com/admin/content/templates ein Listing aller Node-Typen. Wähle den betreffenden und sage "Template erstellen".
Du hast nun drei Felder: für Anrisstext, Full-Node und für den RSS-Feed
Jetzt solltest Du nur vorher schon mal wenigstens einen Inhalt des Inhaltstyps angelegt haben, damit Content Template "etwas Futter hat". Denn unter jedem Editierfeld findest Du eine Art Listing, genannt "Body Variables", aller zu dem Node gehörender Elemente, wenn Du auf ein Element klickst, wird gleich die richtige PHP-Ausgabe in Dein Template gefügt und Du kannst es mit
Es wird auch angezeigt, WAS ein solcher Code ausgeben würde.
Beispiel:
<?php print $body ?>
Das ist die Standardausgabe. Dann wird der ganze Node so ausgegeben, wie Drupal denkt, dass es richtig ist.
Jetzt hast Du z.B. mit dem CCK-Modul Deinem Inhaltstyp noch eine URL beigefügt. Du findest unter Body Variables irgendwo diesen Eintrag. Er könnte beispielsweise so aussehen:
$node->field_url (array)
$node->field_url[0] (array)
$node->field_url[0]['url']
http://www.ride-a-harley.com
$node->field_url[0]['title']
http://www.ride-a-harley.com
$node->field_url[0]['attributes'] (array)
$node->field_url[0]['attributes']['target']
_blank
$node->field_url[0]['display_url']
http://www.ride-a-harley.com
$node->field_url[0]['display_title']
http://www.ride-a-harley.com
$node->field_url[0]['label']
URL
$node->field_url[0]['view']
<a href="http://www.ride-a-harley.com" target="_blank">http://www.ride-a-harley.com</a>
Du siehst: Du kannst Dir auswählen, WAS Drupal genau ausspucken wird, wenn Du nur die URL brauchst, und selbst einen Link bauen willst, dann klickst Du auf $node->field_url[0]['url'] und Content Template setzt folgendes in das Editor-Fenster:
<?php print $node->field_url[0]['url'] ?>
Das bedeutet folgendes:
print (also gebe aus)
$node->... (ein Array-Wert der $node-Variable)
$node->field_url ... (aha, also das Feld URL, darum soll es gehen)
$node->field_url[0] ... (ok, der ERSTE Wert, den es in diesem Feld gibt, es könnten ja mehrere da sein, wir fangen beim Zählen mit 0 an)
$node->field_url[0]['url'] (ok, verstanden, das Feld URL des Node-Arrays bitte, und zwar der erste Wert, und dann nur die URL
So, jetzt kommen wir zu Deiner Frage.
Ich weiß nicht wie Du Dein CCK-Feld nennen wirst, aber sagen wir mal es heißt date (es wird anders heißen, aber so tasten wir uns langsam hin.
Um es auszugeben wird wahrscheinlich irgendwo unter den Body Variables dein -1:-1 auftauchen und darüber sowas ähnliches wie $node->field_date[0]['view']
Suche bitte die Variable raus, wo dein -1:-1 genau so steht, ohne weiteren Markup. Sagen wir es wäre tatsächlich wie in meinem fiktiven Beispiel $node->field_date[0]['view']
Jetzt machen wir mit PHP eine Kleine if-else-Abfrage: if - also WENN das Feld genau -1:-1 lautet, dann spucke aus "closed" an sonsten spucke den eigentlichen Wert aus:
<?php if ($node->field_date[0]['view'] == "-1:-1") : ?>
SPUCKE "CLOSED" AUS
<?php else : ?>
SPUCKE DEN EIGENTLICHEN WERT AUS
<?php endif; ?>
So, jetzt noch mal komplett:
<?php if ($node->field_date[0]['view'] == "-1:-1") : ?>
<?php print "closed"; ?>
<?php else : ?>
<?php print $node->field_date[0]['view']; ?>
<?php endif; ?>
Jetzt sind da noch ein wenig viele
<?php
und
?>
<?php if ($node->field_date[0]['view'] == "-1:-1") :
print "closed";
else :
print $node->field_date[0]['view'];
endif; ?>
Das ist es eigentlich schon! Vergiss nicht alle Felder anzuzeigen, die Du hast, auch den Body. Wenn Du diesen ALLEINE ohne weitere CCK-Felder ausgeben willst (Du willst ja EIN CCK-Feld anders anzeigen lassen), das findest Du weiter unten bei den Body Variablen, es ist in der Regel:
<?php $node->content['body']['#value'] ?>
http://twitter.com/panatlantica
danke dir. also content
am 06.04.2009 - 21:32 Uhr
danke dir.
also content template brauch ich, ich hab meine themes alle ansonsten selber gemacht, ist auch kein problem, das bekomm ich alles hin.
<?php
if ($node->field_date[0]['view'] == "-1:-1") :
print "closed";
else :
print $node->field_date[0]['view'];
endif;
?>
hatte ich auch schon versucht, hatte nur ne kleinigkeit vergessen, aber manchmal steht man halt auf dem schlauch.
aber danke dir auf jeden fall für deine mühe und investierte zeit!