[gelöst] PHP Frage
am 04.04.2014 - 10:18 Uhr in
Hallo zusammen,
ich habe eine (wahrscheinlich) absolute NOOB-Frage. Folgendes: ich habe in einem eigenen Inhaltstypen ein String-Feld erstellt. Dieses Feld soll im Theming genutzt werden, um einen Pfad zu vervollständigen. Also habe ich im .tpl testweise folgendes eingefügt:
<?php hide($content['field_id']);
$id = render($content['field_id']);
$path = variable_get('file_public_path', conf_path() . '/files');
$panorama = $path ."/panorama/".$id;
print("ID: ".$id."\n");
print("Pfad: ".$panorama."\n");?>
Zunächst habe ich irgendwo gelesen, dass ich ein Feld nicht ausblenden darf, um im tpl darauf zugreifen zu dürfen. Also unterdrücke ich die Ausgabe mit "hide". Dann ziehe ich den Feldinhalt und den aktuellen File-Pfad in Variablen und verkette die.
Problem: wahrscheinlich verhagelt mir irgendein Steuerzeichen im $id den Gesamtpfad, denn aus Ausgabe erhalte ich:
Pfad: sites/default/files/panorama/
068-Okonjima-Lodge
...also einen Zeilenbruch. Ich könnte mir vorstellen, dass der Zugriff per render() auf das Feld das Sonderzeichen hinzufügt. Kann mir jemand einen Tipp geben, wie ich den String korrekt verketten kann?
Grüße,
Holger
- Anmelden oder Registrieren um Kommentare zu schreiben
Du hast sicher ein
am 04.04.2014 - 10:40 Uhr
Du hast sicher ein newline(ascii 13) in $id.
Verwende einfach PHP's trim Funktion.
$panorama = $path ."/panorama/".trim($id);
Diese Funktion entfernt Leer/Steuerzeichen (Whitespaces) am Anfang und Ende eines Strings.
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo, danke für deine
am 04.04.2014 - 11:38 Uhr
Hallo,
danke für deine schnelle Antwort. Das Problem ist leider anderer Natur. Schaue ich mir den HTML-Code an, dann wird offensichtlich ein wenig mehr an die $id-Variable übergeben, als nur der String. Gebe ich testweise nur die Variable $id aus, dann erhalte ich:
<p>ID: <div class="field field-name-field-id field-type-text field-label-hidden">
<div class="field-items">
<div class="field-item even">068-Okonjima-Lodge</div>
</div>
Wie komme ich denn an den nackten Feldinhalt ohne Steuercode?
Beste Grüße,
Holger
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!
der HTML Code wird wegen
am 04.04.2014 - 11:48 Uhr
der HTML Code wird wegen render( ausgegeben, hier liegt dein Problem:
$id = render($content['field_id']);
Probier:
$id = $content['field_id'];
wenn dass nicht geht lass Dir mal nur den Wert $content['field_id'] ausgeben:
var_dump($content['field_id']);
um zu sehen wie Du an die field_id kommst.
Es könnte auch sowas wie $content['field_id']['und'][0]['value'] sein.
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Danke nochmals... ich lasse
am 04.04.2014 - 12:37 Uhr
Danke nochmals... ich lasse mir mit dem var_dump die Variablen ausgeben. Dabei kommt heraus:
["field_id"]=> array(1) { ["und"]=> array(1) { [0]=> array(3) { ["value"]=> string(18) "068-Okonjima-Lodge" ["format"]=> NULL ["safe_value"]=> string(18) "068-Okonjima-Lodge" } } }
Ich versuche wie folgt auf das Feld zuzugreifen (nach deinem Beispiel):
$idtest = $content['field_id']['und'][0]['value'];
Leider bleibt der String leer. So langsam verzweifele ich ein wenig.
LG
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!
hmm merkwürdig, ich meine
am 04.04.2014 - 12:49 Uhr
hmm merkwürdig, ich meine content['field_id']['und'][0]['value'] ist richtig, wenn ich die Ausgabe ansehe.
probier mal dich vorzutasten:
var_dump(content['field_id']);
var_dump(content['field_id']['und']);
var_dump(content['field_id']['und'][0]);
var_dump(content['field_id']['und'][0]['value']);
wie weit kommst Du hier?
und wo gibtst Du $idtest aus?
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Jetzt wird es merkwürdig...
am 04.04.2014 - 13:19 Uhr
Jetzt wird es merkwürdig... vielleicht liegt mein Fehler auch an einer anderen Stelle. Am besten, ich fange von vorne an:
1) Ich habe einen neuen Content Type mit verschiedenen neuen Feldern erstellt:
2) Einen neuen Beitrag habe ich wie folgt befüllt:
3) die passende Theme-Datei "node--panorama.tpl.php" habe ich zurzeit wie folgt gefüllt:
<?php //hide($content['field_id']);
//hide($content['body']);
//hide($content['comments']);
//hide($content['links']);
//$id = render($content['field_id']);
//$idpure = $content['field_id'];
//$idtest = $content['field_id']['und'][0]['safe_value'];
//$path = variable_get('file_public_path', conf_path() . '/files');
//$panorama = $path ."/panorama/".$idtest;
//print("<p>ID: ".$content['field_id']['und'][0]['value']."</p>");
//print("<p>Pfad: ". $panorama."</p>");
//print("<p>IDtest: ". $idtest."</p>");
print("<h2>field_id</h2>");
var_dump($content['field_id']);
print("<h2>field_id und</h2>");
var_dump($content['field_id']['und']);
print("<h2>field_id und 0</h2>");
var_dump($content['field_id']['und'][0]);
print("<h2>field_id und 0 value</h2>");
var_dump($content['field_id']['und'][0]['value']);
//dpm( get_defined_vars() );
?>
4) Der Output:
field_id
array(16) { ["#theme"]=> string(5) "field" ["#weight"]=> string(1) "1" ["#title"]=> string(2) "ID" ["#access"]=> bool(true) ["#label_display"]=> string(6) "hidden" ["#view_mode"]=> string(4) "full" ["#language"]=> string(3) "und" ["#field_name"]=> string(8) "field_id" ["#field_type"]=> string(4) "text" ["#field_translatable"]=> string(1) "0" ["#entity_type"]=> string(4) "node" ["#bundle"]=> string(8) "panorama" ["#object"]=> object(stdClass)#293 (31) { ["vid"]=> string(2) "97" ["uid"]=> string(2) "23" ["title"]=> string(25) "Okonjima Lodge - Campsite" ["log"]=> string(0) "" ["status"]=> string(1) "1" ["comment"]=> string(1) "2" ["promote"]=> string(1) "0" ["sticky"]=> string(1) "0" ["nid"]=> string(2) "97" ["type"]=> string(8) "panorama" ["language"]=> string(2) "de" ["created"]=> string(10) "1236461754" ["changed"]=> string(10) "1396613671" ["tnid"]=> string(1) "0" ["translate"]=> string(1) "0" ["revision_timestamp"]=> string(10) "1396613671" ["revision_uid"]=> string(1) "1" ["body"]=> array(1) { ["und"]=> array(1) { [0]=> array(5) { ["value"]=> string(81) "
Dignissim qui blandit; praesent luptatum zzril delenit augue duis.
" ["summary"]=> string(0) "" ["format"]=> string(9) "full_html" ["safe_value"]=> string(76) "
Dignissim qui blandit; praesent luptatum zzril delenit augue duis.
" ["safe_summary"]=> string(0) "" } } } ["field_id"]=> array(1) { ["und"]=> array(1) { [0]=> array(3) { ["value"]=> string(18) "068-Okonjima-Lodge" ["format"]=> NULL ["safe_value"]=> string(18) "068-Okonjima-Lodge" } } } ["field_pano_thumbnail"]=> array(1) { ["und"]=> array(1) { [0]=> array(15) { ["fid"]=> string(3) "287" ["uid"]=> string(1) "1" ["filename"]=> string(28) "068-okonjima-lodge_thumb.jpg" ["uri"]=> string(59) "public://panorama/thumbnails/068-okonjima-lodge_thumb_0.jpg" ["filemime"]=> string(10) "image/jpeg" ["filesize"]=> string(5) "81027" ["status"]=> string(1) "1" ["timestamp"]=> string(10) "1395739581" ["type"]=> string(5) "image" ["rdf_mapping"]=> array(0) { } ["image_dimensions"]=> array(2) { ["width"]=> string(3) "800" ["height"]=> string(3) "267" } ["alt"]=> NULL ["title"]=> NULL ["width"]=> string(3) "800" ["height"]=> string(3) "267" } } } ["metatags"]=> array(0) { } ["rdf_mapping"]=> array(9) { ["rdftype"]=> array(2) { [0]=> string(9) "sioc:Item" [1]=> string(13) "foaf:Document" } ["title"]=> array(1) { ["predicates"]=> array(1) { [0]=> string(8) "dc:title" } } ["created"]=> array(3) { ["predicates"]=> array(2) { [0]=> string(7) "dc:date" [1]=> string(10) "dc:created" } ["datatype"]=> string(12) "xsd:dateTime" ["callback"]=> string(12) "date_iso8601" } ["changed"]=> array(3) { ["predicates"]=> array(1) { [0]=> string(11) "dc:modified" } ["datatype"]=> string(12) "xsd:dateTime" ["callback"]=> string(12) "date_iso8601" } ["body"]=> array(1) { ["predicates"]=> array(1) { [0]=> string(15) "content:encoded" } } ["uid"]=> array(2) { ["predicates"]=> array(1) { [0]=> string(16) "sioc:has_creator" } ["type"]=> string(3) "rel" } ["name"]=> array(1) { ["predicates"]=> array(1) { [0]=> string(9) "foaf:name" } } ["comment_count"]=> array(2) { ["predicates"]=> array(1) { [0]=> string(16) "sioc:num_replies" } ["datatype"]=> string(11) "xsd:integer" } ["last_activity"]=> array(3) { ["predicates"]=> array(1) { [0]=> string(23) "sioc:last_activity_date" } ["datatype"]=> string(12) "xsd:dateTime" ["callback"]=> string(12) "date_iso8601" } } ["cid"]=> string(1) "0" ["last_comment_timestamp"]=> string(10) "1392672290" ["last_comment_name"]=> NULL ["last_comment_uid"]=> string(2) "23" ["comment_count"]=> string(1) "0" ["name"]=> string(6) "Holger" ["picture"]=> string(1) "0" ["data"]=> string(189) "a:6:{s:16:"ckeditor_default";s:1:"t";s:20:"ckeditor_show_toggle";s:1:"t";s:14:"ckeditor_width";s:4:"100%";s:13:"ckeditor_lang";s:2:"en";s:18:"ckeditor_auto_lang";s:1:"t";s:7:"contact";i:0;}" ["entity_view_prepared"]=> bool(true) } ["#items"]=> array(1) { [0]=> array(3) { ["value"]=> string(18) "068-Okonjima-Lodge" ["format"]=> NULL ["safe_value"]=> string(18) "068-Okonjima-Lodge" } } ["#formatter"]=> string(10) "text_plain" [0]=> array(1) { ["#markup"]=> string(18) "068-Okonjima-Lodge" } }
field_id und
NULL
field_id und 0
NULL
field_id und 0 value
NULL
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!
Na ja, ich würde das in einem
am 04.04.2014 - 14:18 Uhr
Na ja, ich würde das in einem eigenen Modul schreiben. Aber mit deinem Ansatz komme ich so nicht klar! Warum ziehst Du nicht direkt den Namen aus dem file? Wenn Du den jedesmal reinschreibst wird die Fehlerquote doch per se erhöht?
drupal_set_message
am 04.04.2014 - 14:24 Uhr
drupal_set_message('<pre>'.print_r($field_id,1).'</pre>');
ergibt was?
maen schrieb Na ja, ich würde
am 04.04.2014 - 14:38 Uhr
Na ja, ich würde das in einem eigenen Modul schreiben. Aber mit deinem Ansatz komme ich so nicht klar! Warum ziehst Du nicht direkt den Namen aus dem file? Wenn Du den jedesmal reinschreibst wird die Fehlerquote doch per se erhöht?
Weil im Template später noch einige Skripte mit unterschiedlichen Endungen aufgerufen werden, die einen direkten Bezug zu dem Filenamen haben.
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!
maen
am 04.04.2014 - 14:40 Uhr
drupal_set_message('<pre>'.print_r($field_id,1).'</pre>');
ergibt was?
Array
(
[0] => Array
(
[value] => 068-Okonjima-Lodge
[format] =>
[safe_value] => 068-Okonjima-Lodge
)
)
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!
Macht doch nichts. Du
am 04.04.2014 - 14:44 Uhr
Macht doch nichts. Du speicherst doch den Wert dann aus dem file Name in eine Variable, so wie Du es jetzt auch gerade versuchst. Ober der string aus dem handgeschriebenen kommt oder aus dem filenamen, ist doch egal. Und die Fehlerquote sinkt bei zweitem Ansatz.
Hallo,dieses Rumgefrickel
am 04.04.2014 - 16:11 Uhr
Hallo,
dieses Rumgefrickel mit den render arrays finde ich persönlich mit "unelegant" noch harmlos beschrieben ;)
Drupal bietet hier eigene schöne Funktionen an, die man auch benutzen könnte, siehe hier https://api.drupal.org/api/drupal/modules!field!field.module/group/field/7.
$output= field_get_items('node', $node, 'field_id');
$output = $output[0]['value'];
und maen hat Recht, wenn mehr Logik dazukommt, gehört es in ein Modul...
Gruß
Christian
Don't code today what you can't debug tomorrow
Ariya Hidayat
Christian hat die beste
am 04.04.2014 - 16:14 Uhr
Christian hat die beste Antwort gegeben:
array(16) { ["#theme"]=> string(5) "field" ["#weight"]=> string(1) "1" ["#title"]=> string(2) "ID" ["#access"]=> bool(true) ["#label_display"]=> string(6) "hidden" ["#view_mode"]=> string(4) "full" ["#language"]=> string(3) "und" ["#field_name"]=> string(8) "field_id" ["#field_type"]=> string(4) "text" ["#field_translatable"]=> string(1) "0" ["#entity_type"]=> string(4) "node" ["#bundle"]=> string(8) "panorama" ["#object"]=> object(stdClass)#293 (31) { ["vid"]=> string(2) "97" ["uid"]=> string(2) "23" ["title"]=> string(25) "Okonjima Lodge - Campsite" ["log"]=>
...
Im code oben sehe ich, dass Du mit
$content['field_id']['#object'] an das node object kommst.
Du könntest so mit $content['field_id']['#object']->title bzw. $content['field_id']['#object']->nid auch
an die gewünschten Daten kommen, doch die Field API zu nutzen ist eher der Drupal weg.
Tipp:
Wenn Du devel installiert hast mach ein dpm($content['field_id']);
dann siehst Du wo welche Felder sind.
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Christian, das wars!
am 04.04.2014 - 16:37 Uhr
Hallo Christian,
das wars! Geil!
Danke für eure Hilfe!!
Beste Grüße,
Holger
---
Hobby: travel-pictures.net - NEU: 360 Grad Panoramen aus Afrika!