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 - 12: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 - 14: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 - 14: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 - 17: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 - 18: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 - 18: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 - 20: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 - 08: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 - 08:30 Uhr

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 9 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 1 Stunde
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 14 Minuten
  • Update: jetzt gibt's ein
    vor 8 Wochen 18 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 22 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