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

[gelöst] Theme_hook($node) lädt nicht das Node-object

Eingetragen von abc123 (92)
am 26.12.2010 - 14:36 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hi,

ich schreibe gerade an einem Modul mit dem ich auf der Bearbeitungsseite Datenbankeinträge auswählen und zum Node-object hinzufügen und entfernen kann. Die Ausgabe soll als Tabelle mittels function theme_hook($node) und darin mit $output = theme('table', $headers, $rows) erfolgen.
Dummerweise kann ich $rows mit allem möglichen füllen, nur nicht mit dem Node-object.
Jetzt suche ich mittlerweile seit 4 Tagen nach einer Lösung...
Vielleicht kann hier jemand helfen.

/**
* Implement hook_nodeapi().
*/
function meinmodul_nodeapi(&$node, $op, $teaser, $page) {
    switch ($op) {
        case 'delete revision':
            db_query('DELETE FROM {meinmodul} WHERE nid = %d AND vid = %d', $node->nid, $node->vid);
        break;
    }
}

/**
* Implement hook_view().
*/
function meinmodul_view($node, $teaser = FALSE, $page = FALSE) {
    $node = node_prepare($node, $teaser);
    $meinfeld_count = count($node->meinfeld);
    for ($i = 0; $i < $meinfeld_count; $i++) {
        $node->content['meinfeld'] = array ( '#value' => theme('meinmodultheme', $node->meinfeld, '') );
    }
    return $node;
}

/**
* Implement hook_theme()
*/
function meinmodultheme_theme() {
    return array(
        'meintheme' => array(
            'arguments' => array('node'),
        ),
    );
}

/**
* Implement theme_hook()
*/
function theme_meintheme($node) {
    $node = node_load($node->nid);
    $headers = array(
        t('Spalte 1'),
        t('Spalte 2'),
        t('Spalte 3'),
        t('Spalte 4'),
    );
 
// Füllen des arrays von Hand funktioniert
    $rows = array(
        array(
            'Zelle 1, 'Zelle 2', 'Zelle 3', 'Zelle 4'
        ),
    );
// ENDE Füllen des arrays von Hand funktioniert

// Füllen des arrays mit Datenbankabfrage funktioniert
    $sql = "SELECT * FROM meinfeld";
    $res = db_query($sql);
    while ($row = db_fetch_object($res)) {
        $rows[] = array(
            $row-title, $row->nid, $row->title, $row->type
        );
    }
// ENDE Füllen des arrays mit Datenbankabfrage funktioniert

// Füllen des arrays mit Variable funktioniert
    global $user;
    $rows = array(
        'data' =>array(
            array('data' => $user->name
            ),
        ),
    );
// ENDE Füllen des arrays mit Variable funktioniert

// Füllen mit Node Object funktioniert NICHT
    $rows[] = array(
        $node->content['meinfeld']['title'], $node->content['meinfeld']['inhalt'], $node->content['meinfeld']['diese'], $node->content['meinfeld']['jenes']
    );
// ENDE Füllen mit Node Object funktioniert NICHT

    $output = theme('table', $headers, $rows);
    return $output;
}

Greetz
abc123

‹ [gelöst] JS für Formular-Label entfernen ajax_examples ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Gib Dir mal mittels print_r

Eingetragen von wla (9461)
am 26.12.2010 - 15:09 Uhr

Gib Dir mal mittels print_r das Node-Objekt aus. Ich bin mir sicher, daß Du die einzelnen Felder falsch ansprichst. Da sind noch Arrays drum herum.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Werner

Eingetragen von abc123 (92)
am 27.12.2010 - 12:29 Uhr

danke für die schnelle Antwort. Hier die Ausgabe von print_r($node)

[meinfeld] => Array
        (
            [0] => Array
                (
                    [title] => Titel 1
                    [inhalt] => Inhalt 1
                    [dieses] => Dieses 1
                    [jenes] => Jenes 1
                )

            [1] => Array
                (
                    [title] => Titel 2
                    [inhalt] => Inhalt 2
                    [dieses] => Dieses 2
                    [jenes] => Jenes 2
                )

Eigentlich sollte ich mit

    $rows[] = array(
        $node->meinfeld[0]['title'], $node->meinfeld[0]['inhalt'], $node->meinfeld[0]['dieses'], $node->meinfeld[0]['jenes']
    );

an die Elemente des Node-objectes herankommen. Tuts aber nicht.
In der Templatedatei node-meinmodul.tpl.php gebe ich die Felder ja auch mit
<?php print $node->meinfeld[0]['title'] ?>
aus.

Gruss abc123

PS. Wenn das funktioniert steppe ich natürlich mit einem Loop durch die einzelnen Elemente des arrays und erhalte so eine tabellenartig gestaltete Liste meiner Datenbankeinträge.

  • Anmelden oder Registrieren um Kommentare zu schreiben

theme

Eingetragen von stBorchert (6003)
am 27.12.2010 - 13:12 Uhr

Hallo.

abc123 schrieb

$node->content['meinfeld'] = array ( '#value' => theme('meinmodultheme', $node->meinfeld, '') );

Definierst Du irgendwo die Funktion theme_meinmodultheme($arg1, $arg2)? Die versucht Drupal nämlich über theme('meinmodultheme', $node->meinfeld, '') aufzurufen.

abc123 schrieb

function theme_meintheme($node) {
    $node = node_load($node->nid);

Wieso lädst Du hier nochmal das Node-Objekt, das Du schon als Argument übergeben bekommst? Das kostet unnötig Performance.
Wo genau wird diese Theme-Funktion aufgerufen und welche Werte übergibst Du?

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Stefan

Eingetragen von abc123 (92)
am 27.12.2010 - 14:48 Uhr

YES,
es geht..
Die function theme_meinmodultheme($arg1, $arg2 usw..) soll eigentlich diverse Datenbankeinträge - die ich später noch erweitern möchte - mittels $output als Tabelle realisieren und von function meinmodul_view($node, $teaser = FALSE, $page = FALSE) getriggert werden. Nun hatte ich versucht in der function meinmodul_view() per Loop durch das array $node->content durchzusteppen und für jedes Element dieses arrays die function theme_meintheme($node) mit der Tabellenausgabe zu bemühen. Deshalb hatte ich als Argument für
$node->content['meinfeld'] = array ( '#value' => theme('meinmodultheme', $node->meinfeld, '') );
das Element des Node-objectes ($node->meinfeld) übergeben.
Hatte da auch schon ein schlechtes Gewissen wegen der Performance und zum Debuggen hatte ich testweise in der function theme_meintheme($node) das Node-object mittels
$node = node_load($node->nid)
nochmals geladen.

Wenn ich den Loop aber in die function theme_meinmodul($node) verlagere und als Argument nur $node in der function meinmodul_view, also
$node->content['meinfeld'] = array ( '#value' => theme('meinmodultheme', $node) );
übergebe, dann funktionierts wie gewünscht.

Hier im Zusammenhang der funktionierende Code:

**
* Implement hook_nodeapi().
*/
function meinmodul_nodeapi(&$node, $op, $teaser, $page) {
    switch ($op) {
        case 'delete revision':
            db_query('DELETE FROM {meinmodul} WHERE nid = %d AND vid = %d', $node->nid, $node->vid);
        break;
    }
}

/**
* Implement hook_view().
*/
function meinmodul_view($node, $teaser = FALSE, $page = FALSE) {
    $node = node_prepare($node, $teaser);
    $node->content['meinfeld'] = array ( '#value' => theme('meinmodultheme', $node) );
    return $node;
}

/**
* Implement hook_theme()
*/
function meinmodultheme_theme() {
    return array(
        'meintheme' => array(
            'arguments' => array('node'),
        ),
    );
}

/**
* Implement theme_hook()
*/
function theme_meintheme($node) {
    $headers = array(
        t('Spalte 1'),
        t('Spalte 2'),
        t('Spalte 3'),
        t('Spalte 4'),
    );
 
$meinfeld_count = count($node->meinfeld);
for ($i = 0; $i < $meinfeld_count; $i++) {
    $rows[] = array(
        $node->meinfeld[$i]['title'],
        $node->meinfeld[$i]['inhalt'],
        $node->meinfeld[$i]['dieses'],
        $node->meinfeld[$i]['jenes']
    );
}
$output = theme('table', $headers, $rows);
return $output;
}

Danke nochmal, dieser Anstoss war die richtige Richtung

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 13 Stunden
  • Hey danke
    vor 3 Tagen 8 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 2 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 5 Tagen
  • In der entsprechenden View
    vor 1 Woche 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 5 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 11 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