Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst] preprocess_node

Eingetragen von captain (8)
am 16.04.2013 - 13:43 Uhr in
  • Modul-Entwicklung

Ich möchte über preprocess_node einen zsätzlichen Text nach dem Inhalt des eigentlichen Textes anhängen.
Leider ist mir nicht klar wie und was ich in dem übergebenem Array ändern muss, damit es nachher auch angezeigt wird :(

<?php

function themename_preprocess_node(&$variables) {
   
$text = "Das ist der Text der nach dem eigentlichen Inhalt des Nodes erscheinen soll";

   
//So geht es leider nicht
   
$variables['body'][0]['value'].=$text;
   
$variables['body'][0]['safe_value'].=$text;
   
}
?>

Bin für jeden Hinweis dankbar.

‹ Kommentare auf meine Inhalte. Die Summe der neuen abfragen [gelöst] preprocess_node ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

geht es vielleicht

Eingetragen von tobi-berlin (857)
am 16.04.2013 - 15:38 Uhr

geht es vielleicht so:

function themename_preprocess_node(&$variables) {
    $variables['text'] = "Das ist der Text der nach dem eigentlichen Inhalt des Nodes erscheinen soll";
  
}

Und dann in der Template-Datei:

<?php print $text; ?>

Also besser wäre:

<?php if($text) {print $text;} ?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nur zur Sicherheit:Deine

Eingetragen von leda.ch (977)
am 16.04.2013 - 15:45 Uhr

Nur zur Sicherheit:
Deine Function heisst nicht etwa "themename_preprocess_node" - die wird so nicht angesprochen, ausser Dein Theme heisst "themename".
Also allenfalls das Wort "themename" durch den Namen Deines Themes ersetzen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wo hast Du die

Eingetragen von oteno (775)
am 16.04.2013 - 18:05 Uhr

Wo hast Du die $variables['body'].... her, hast Du die irgendwo gesetzt?
BTW: Wieso steht das hier unter Modulentwicklung?

Gruß
Christian

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die $variables kommt aus der

Eingetragen von captain (8)
am 16.04.2013 - 19:03 Uhr

Die $variables kommt aus der Definition der Funktion

<?php
function ttnew_preprocess_node(&$variables) {
?>

Wie man sieht habe ich den Namen des Themes genommen.

Ich dacht es wäre unter Modulentwicklung gut aufgehoben. Auch wenn ich es tatsächlich nicht innerhalb eines Modules verwende, wäre das Vorhaben bestimmt auch für ein Modul geeignet.

Das soll später dabei rauskommen:
Unter dem Text eines Menüpunktes (Page Node ) sollen alle Inhalte der verfügbaren Unterpunkte aufgelistet werden. Die komplette Funktion sieht bisher so aus:

<?php

function ttnew_preprocess_node(&$variables) {

   
$node =$variables['elements']['#node'];
    if(
   
$node->nid!=47
   
or $node->nid != 46
   
or $node->nid != 19
   
or $node->nid != 20
   
or $node->nid != 21
   
or $node->nid != 22
   
or $node->nid != 23
   
){
       
//Unterpunkte
       
$parentnow = menu_link_get_preferred('node/'.$node->nid);

       
$parameters = array(
       
'active_trail' => array($parentnow['plid']),
       
'only_active_trail' => FALSE,
       
'min_depth' => $parentnow['depth']+1,
       
'max_depth' => $parentnow['depth']+1,
       
'conditions' => array('plid' => $parentnow['mlid']),
        );

       
$children2 = menu_build_tree($parentnow['menu_name'], $parameters);

        if(
is_array($children2) AND count($children2)>0){
            while (list(
$menu2)=each($children2)) {
               
$text .= '<div class="ag-subsubcontent">';
                if(
$children2[$menu2]['link']['access_callback']== 'views_access'){
                   
$text .= views_embed_view($arr[1], 'default');
                }else{
                   
$build = node_view(node_load(substr($children2[$menu2]['link']['link_path'],strpos($children2[$menu2]['link']['link_path'],'/')+1)),'full');
                   
$text .= drupal_render($build);
                }
               
$text .= '</div>';
            }
           
//Content aendern
           
$variables['body'][0]['value'].=$text;
           
$variables['body'][0]['safe_value'].=$text;
        }
    }

}
?>

Wenn ich die Variable $text einfach per echo in der Funktion ausgebe, steht der Inhalt über dem Inhalt des eigentich aufgerufenen Menüpuktes. Es soll aber darunterstehen. Daher dachte ich, ich könnte hier irgendwo die Variable modifizieren, welche nachher für den Content zuständig ist.

Irgendjemand eine Idee?
In der Funktion ist ja auch ein Node object verfügbar $node, aber ich weiss nicht über welchen Aufruf ich in diesem die Inhalte ändern kann.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Daher dachte ich, ich

Eingetragen von oteno (775)
am 16.04.2013 - 19:53 Uhr
Zitat:

Daher dachte ich, ich könnte hier irgendwo die Variable modifizieren, welche nachher für den Content zuständig ist.

Meinst Du die hier $variables['node']->body['und']['0']['value'] oder - nochmal gefragt -benutzt Du ein Theme das die $variables['body'].. erzeugt (ich glaube ZEN macht sowas..)?
Gruß
Christian

  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider hat das auch keine

Eingetragen von captain (8)
am 16.04.2013 - 21:25 Uhr

Leider hat das auch keine Auswirkung auf die spätere Ausgabe.

<?php
$variables
['node']->body['und']['0']['value'].=$text;
?>

preprocess_node ist doch genau dafür gedacht, den node vor der Ausgabe zu Modifizieren.
Bin noch nicht so lange mit Drupal, aber irgendwie sind die Dokumentationen manchmal etwas uneingängig.

Ich habe das Theme übrigens komplett selbst erstellt, also gehe ich davon aus, dass $variables['body'] zum Standard gehört.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ganz banal ist das nicht. Die

Eingetragen von oteno (775)
am 17.04.2013 - 09:15 Uhr

Ganz banal ist das nicht. Die Variable kommt schon geändert an beim Rendern der Node - kannst mal mit var_dump reinsehen.
Du wirst ja die Variable ja nicht direkt ausgeben, wie man es manchmal so macht, wenn manin der template.php ein Feld geändert hat, sondern versucht wahrscheinlich etwas in das content-Renderarray zu injezieren.
Da kann es schon heikel werden, und es wird auch nicht alles erlaubt sein. Eventuell musst du mit einem preprocess auf das Feld gehen, dafür gibt es auch Funktionen und - Dir mal den Render-Prozess genauer aussehen.
Einfacher wäre es wohl, den Body als separate Variable auszugeben.

Gruß
Christian

  • Anmelden oder Registrieren um Kommentare zu schreiben

gefunden

Eingetragen von captain (8)
am 17.04.2013 - 09:30 Uhr

$vars['content']['body'][0]['#markup'] .= $text;

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 1 Woche 5 Tagen
  • Wenn die Subdomain auf
    vor 2 Wochen 3 Stunden
  • ordnerstruktur
    vor 2 Wochen 14 Stunden
  • Die Subdomain muß auf den
    vor 2 Wochen 2 Tagen
  • Verwende doch das Tag dafür,
    vor 5 Wochen 4 Tagen
  • Guckst du hier: step by step
    vor 5 Wochen 4 Tagen
  • Guckst du hier: step by step
    vor 5 Wochen 4 Tagen
  • Ich habe ja keine Angst vor
    vor 6 Wochen 6 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 7 Wochen 2 Tagen
  • Vielen Dank erst einmal, aber
    vor 7 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250289
Registrierte User: 20520

Neue User:

  • Wolf Dab
  • Scottteday
  • MichaelPeeno

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 27 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association