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

  • Discovering the Numismatics
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • 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
  • 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
Weiter

Neue Kommentare

  • Arrrrg. Nix Tabelle :-D /*
    vor 3 Wochen 2 Tagen
  • Textboxen mit Tabelle
    vor 3 Wochen 2 Tagen
  • Du sollst ja auch keine
    vor 3 Wochen 2 Tagen
  • Theme
    vor 3 Wochen 2 Tagen
  • Welches Theme benutzt du
    vor 3 Wochen 2 Tagen
  • Mit Responsive Raster hatte
    vor 3 Wochen 3 Tagen
  • Hallo Alex,um das Häkchen
    vor 3 Wochen 3 Tagen
  • Modul view_unpublished
    vor 3 Wochen 4 Tagen
  • Modul "override node options"
    vor 3 Wochen 5 Tagen
  • Im Grunde ist dass ein
    vor 4 Wochen 15 Stunden

Statistik

Beiträge im Forum: 250271
Registrierte User: 20482

Neue User:

  • Sergio Dab
  • Aoirhic
  • Stevebok

» Alle User anzeigen

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