Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

[gelöst] eigene PHP-Anweisungen in template.php funktionieren nicht

Eingetragen von Exterior (2903)
am 21.10.2009 - 15:59 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Hey Leute, ich habe ein kleines Problem:

Wenn man einen neuen Node erstellt, wird ja angezeigt, wer diesen Beitrag wann verfasst hat.
Die Ausgabe dafür steht in der node.tpl.php mit "print $submitted".

Und im Beitrag steht dann Beispielsweise:

"Verfasst von Max Muster am 20. Oktober 2009 - 1:00"

Allerdings würde ich daran gerne eine kleine Änderung vornehmen.

Nämlich möchte ich den Benutzern meiner Seite sozusagen einen "Titel" bzw. eine Funktion innerhalb unseres Vereins zuweisen.
Und zwar war das so gedacht, dass es dafür ein Feld im Nutzerprofil gibt.

Ich lege also ein Feld für Benutzerprofile an und bei den meisten steht dort eben "Mitglied" drin.

Aber zum Beispiel bei Max Muster soll dort "Ausbildungsleiter" stehen, weil er eben bei uns der Ausbildungsleiter ist.
Wenn man das Profil der Leute aufruft, kann man diese Funktion also auch sehen.

Und ich möchte es jetzt so einrichten, dass bei einem neuen Beitrag die Funktion mit hinter dem Namen steht.

Also soll das ganze am Ende so aussehen:

"Verfasst von Max Muster, Ausbildungsleiter am 20. Oktober 2009 - 1:00"

Allerdings weiß ich nicht so recht, wie ich das machen kann =(

Kann man in der node.tpl.php irgendwie über $name oder $uid auf die Profilfelder zugreifen?
Oder kennt jemand einen anderen Weg, das ganze umzusetzen?

mfg Exterior

‹ Eingabeformat: Filtered HTML - erlaubt es keine css Angaben? [gelöst] Inhaltelement anlegen - im Backend bleiben ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Du kannst die Funktion

Eingetragen von tiger (415)
am 21.10.2009 - 16:59 Uhr

Du kannst die Funktion function theme_node_submitted in der template.tpl.php überschreiben

function my_theme_node_submitted($node) {

// Da musst du nun das Profil laden profile_load_profile($user);

// Dein Feld $profile->dein_feld in die Ausgabe einbauen

  return t('Submitted by !username on @datetime',
    array(
      '!username' => theme('username', $node),
      '@datetime' => format_date($node->created),
    ));
}

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wo finde ich diese

Eingetragen von Exterior (2903)
am 21.10.2009 - 20:51 Uhr

Wo finde ich diese template.tpl.php?

In meinem Template "Pixture Reloaded" gibt es nur eine Datei namens "template.php" und dort drin taucht nicht einmal das Wort "submitted" auf =(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Empfehlung drupal handbuch

Eingetragen von karl1120 (97)
am 22.10.2009 - 08:04 Uhr

Meine empfehlung an dich währe du :( liesst :( dir das Theming handbuch auf drupalcenter durch dann kannst du auf jeden fall was mit dem kommentar oben anfangen :) drupal theming handbuch

zu 1. ja er meint die template.php

und zu 2. es ist ein beispiel für eine funktion die denn von dir gewollten effect haben sollte . du wirst sie nicht in der template.php finden sondern erst selbst schreiben müssen oder (kopieren ;) indem du mit dem devel modul auf die ausgabe von"Verfasst von Max Muster am 20. Oktober 2009 - 1:00 " drückst und dann im schwarzen fenster auf den funktions name ).

mytheme wird ersetzt durch deinen theme name. aber das wird alles besser und ausführlicher im handbuch erklärt

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für den Ratschlag

Eingetragen von Exterior (2903)
am 22.10.2009 - 10:27 Uhr

Danke für den Ratschlag =)

Also das erstellen von der Funktion hat super geklappt, somit ist ja fast alles in Ordnung.

Allerdings weiß ich jetzt nicht so recht, wie ich das gewünschte Feld in die Ausgabe bekomme =(

Muss ich dieses profile_load_profile($user) einer Variable zueisen?
Also so hier: $profile = profile_load_profile($user)?

Hab leider keine Ahnung, wie ich jetzt genau an das Profilfeld komme =(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider ein neues Problem

Eingetragen von Exterior (2903)
am 23.10.2009 - 20:51 Uhr

So, ich bin jetzt zwar an das Profilfeld rangekommen, aber die Variable $user ist wohl immer mit dem User belegt, der sich gerade die Seite anschaut. Das heißt, wenn ich das so mache, würden jedem User die eigenen Profildaten angezeigt, was ja recht sinnlos ist.

Also habe ich mal kurzerhand versucht, einen anderen Weg einzuschlagen:
Per PHP selbst eine Datenbank-Verbindung herstellen, die nötigen Felder abfragen, in Variablen abspeichern und ausgeben.

Soweit, so gut, allerdings stoße ich dabei an ein Problem =(

So sieht mein PHP-Script für die das Submitted aus:

<?php function pixture_reloaded_node_submitted($node) {
 
 
//Name für WHERE-Klausel ermitteln
 
$name = theme('username', $node);
 
$datum = format_date($node->created);
 
 
//MySQL-Verbindung aufbauen
 
$host = "localhost";
 
$usr = "Benutzername";
 
$pw = "Passwort";
 
$db = "Datenbank";
 
 
$verbindung = mysql_connect($host, $usr, $pw) or die ("Keine Verbindung zu der Datenbank möglich.");
 
mysql_select_db($db, $verbindung);
 
 
//MySQL-Abfrage erstellen und ausführen
 
$sql = "SELECT profile_values.value FROM profile_values INNER JOIN users ON profile_values.uid = users.uid WHERE (users.name LIKE '$name') AND ((profile_values.fid LIKE '7') OR (profile_values.fid LIKE '1') OR (profile_values.fid LIKE '2')) ORDER BY profile_values.fid;";
 
$result = mysql_query($sql);
 
 
//Die drei benötigten Felder in Variablen ablegen
 
$row = mysql_fetch_array($result);
 
$vorname = $row['value'];

 
$row = mysql_fetch_array($result);
 
$nachname = $row['value'];

 
$row = mysql_fetch_array($result);
 
$typ = $row['value'];
 
 
 
//Submitted-Ausgabe zusammenstellen
 
return ("Geschrieben von $vorname $nachname($typ) am $datum");?>

Funktioniert leider nicht so ganz und ich weiß nicht, warum =(

Wenn ich alles von meinem eigenen PHP-Teil in eine eigene test.php kopiere, welche dann so aussieht:

<?php
$host
= "localhost";
$usr = "Benutzername";
$pw = "Passwort";
$db = "Datenbank";


$name = 'Max Muster';


$verbindung = mysql_connect($host, $usr, $pw) or die ("Keine Verbindung zu der Datenbank möglich.");
mysql_select_db($db, $verbindung);


$sql = "SELECT profile_values.value FROM profile_values INNER JOIN users ON profile_values.uid = users.uid WHERE (users.name LIKE '$name') AND ((profile_values.fid LIKE '7') OR (profile_values.fid LIKE '1') OR (profile_values.fid LIKE '2')) ORDER BY profile_values.fid;";
$result = mysql_query($sql);


$row = mysql_fetch_array($result);
$vorname = $row['value'];


$row = mysql_fetch_array($result);
$nachname = $row['value'];


$row = mysql_fetch_array($result);
$typ = $row['value'];


echo
"Verfasst von $vorname $nachname ($typ) am so-und-so-vielten";
?>

dann gibt mir die Datei test.php fehlerfrei "Verfasst von Max Muster (Ausbilder) am so-und-so-vielten" aus.

Aber wenn ich das ganze wie oben in die submitted-Funktion in der template.php einfüge, funktioniert es nicht mehr =(

Er gibt die Variablen meiner eigenen PHP-Anweisungen einfach nicht aus.

Das heißt, das obere Script gibt dann "Geschrieben von am 10.Oktober 2009 - 20:00" aus.

Die Variablen $name und $datum funktionieren ohne Probleme und lassen sich in "return t()" auch ausgeben, aber die Variablen, welche aus meiner eigenen Datenbank-Verbindung ausgegeben werden sollen, nämlich $vorname, $nachname und $typ, werden nicht ausgegeben, anscheinend werden sie gar nicht belegt.

Leider hab ich keine Ahnung, woran das liegen könnte =(

Wie gesagt, die PHP-Anweisung mit der Datenbankverbindung und auch die Variablen-Belegung funktioniert auf jeden Fall.
Aber sobald ich sie in diese Funktion in der template.php einfüge, klappt's nicht mehr =(

Bitte helft mir.

mfg Exterior

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also ich bin jetzt einen

Eingetragen von Exterior (2903)
am 24.10.2009 - 16:39 Uhr

Also ich bin jetzt einen Schritt weiter, aber so richtig hilft mir das auch nicht =(

Folgendes habe ich herausgefunden:

Wenn ich unter "Berechtigungen" einer Rolle erlaube, dass sie die Nutzerprofile anschauen darf, dann werden dieser Rolle meine ganzen eigenen Variablen ($vorname usw.) nicht mit ausgegeben.
Wenn ich allerdings verbiete, die Nutzerprofile einzusehen, dann werden die Variablen ausgegeben und alles klappt so, wie's soll.

Als Beispiel: Ich als Admin habe dort eine fehlerhafte Ausgabe, weil ich natürlich die Profile sehen darf.

Gäste allerdings dürfen keine Profile sehen. Als meine Freundin einfach mal die Seite besucht hatte, war bei ihr die Ausgabe in bester Ordnung.

Weiß jemand, woran das liegt?

Ich würde nämlich gerne beides verbinden: Profile anschauen dürfen UND eine fehlerfreie Ausgabe liefern.

Woran kann das denn liegen, dass die Variablen nicht ausgegeben werden, wenn man Profile einsehen darf?

mfg Exterior

  • Anmelden oder Registrieren um Kommentare zu schreiben

So kannst du den user zum

Eingetragen von tiger (415)
am 24.10.2009 - 17:03 Uhr

So kannst du den user zum node ausgeben

// node id bestimmen
$nid = arg(1);
// node laden
$node = load_node($nid);
// user laden
$user = load_user($nid->uid);
//profil laden
$profile = load_profile($user);

  • Anmelden oder Registrieren um Kommentare zu schreiben

Habe das Problem jetzt

Eingetragen von Exterior (2903)
am 01.11.2009 - 18:36 Uhr

Habe das Problem jetzt anders "gelöst".

Da ich nicht feststellen konnte, warum die PHP-Anweisung nicht ausgeführt wird, wenn man Leserechte auf die Nutzerprofile hat, habe ich allen diese Leserechte entzogen und mir mit Views eine eigene Profilseite gebastelt, die den Benutzer als Argument übergibt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Tiger, kannst Du das ein wenig genauer erklären?

Eingetragen von Makku01 (58)
am 22.02.2011 - 16:06 Uhr

Ich komm da nicht weiter obwohl das genau meine Problemstellung betrifft.

Vielen Dank

  • Anmelden oder Registrieren um Kommentare zu schreiben

Holla, das ist ja auch mal

Eingetragen von Exterior (2903)
am 22.02.2011 - 17:47 Uhr

Holla, das ist ja auch mal ein richtig alter Thread ^^

Was genau ist denn dein Problem und wie genau kommst du nicht weiter?

  • Anmelden oder Registrieren um Kommentare zu schreiben

na ja, ich wollte die

Eingetragen von Makku01 (58)
am 22.02.2011 - 18:06 Uhr

na ja, ich wollte die theme_node_submitted in der template.tpl.php überschreiben.
Über $node->uid bekomme ich die uid des Authors. Jetzt wollte ich dem Template sagen, dass es mir doch bitte anstatt den Username der in $name steht ein feld aus dem Profilfeld ausgeben soll.

So jetzt hab ich die Funktion theme_node_submitted($node) und habe so gar keine Ahnung wie es weitergehen soll.

Zitat:

// node id bestimmen
$nid = arg(1);
// node laden
$node = load_node($nid);
// user laden
$user = load_user($nid->uid);
//profil laden
$profile = load_profile($user);

hab ich nix kapiert, wo kommt da was hin, und wo nicht?

(Übrigens hab ich ne Lösung mittlerweile. Das funktioniert ganz gut mit dem Realname Modul oder mit einem View - aber ich wollte das hier oben gerne kapieren.)

BTW, hast Du evtl noch eine Antwort auf http://www.drupalcenter.de/node/33732? ;-)

  • 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 1 Woche 5 Tagen
  • Hey danke
    vor 1 Woche 6 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 6 Stunden
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 2 Tagen
  • In der entsprechenden View
    vor 3 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 2 Tagen
  • gelöst
    vor 5 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 1 Benutzer und 13 Gäste online.

Benutzer online

  • wla

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