Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Vorgehensweise bei Kategorisierung/Klassifizierung von Inhalten zur Darstellung?

Eingetragen von hermx (256)
am 08.06.2008 - 09:46 Uhr in
  • Themes & Theming
  • Drupal 5.x

Ich habe folgendes vor und würde gerne wissen, wie man am besten dabei vorgeht, bevor ich viel Zeit in eine falsche Richtung der Entwicklung investiere:

Meine User sollen einzelne kleine Beiträge (nodes von bestimmten eigenen Inhaltstypen) verfassen dürfen und diese nodes sollen irgendwie kategorisiert oder klassifiziert werden, um mit dieser Klassifizierung dafür zu sorgen, dass diese Beiträge auf bestimmten Themen zugeordenten Seiten in einem entsprechenden view oder einer nodequeue (siehe den Modul node queue) erscheinen. (Also von der Anforderung her in etwa so ähnlich wie ein blog.)
Konkret: Es geht um die Seite einer Schule. Berechtigte Lehrer sollen gewisse Inhalte für bestimmte Schulfächer (wie Wettbewerbsergebnisse, Arbeitsgemeinschaften, Aktuelle Infos etc.) erstellen können und diese Beiträge sollen automatisch auf der jeweiligen Fachseite in einem bestimmten Abschnitt (Wettberwerbe etc.) erscheinen. (Das variable Erscheinen kann ich bereits im Prinzip mit views mit Filter-Argumenten lösen.)
Die Frage ist nun, wie klassifiziert man die Inhalte am besten, so dass man dann entsprechende node-templates zur jeweils unterschiedlichen Darstellung erstellen kann?
Nimmt man dazu am besten Taxonomie oder ist es besser, eine Klassifizierung als Feld im jeweiligen Inhaltstyp zu definieren? Was ist generell in einem solchen Szenario sinnvoll - Taxonomie oder eigenes Feld? Welche Variante lässt sich mit php in der entsprechenden node-inhaltstyp.tpl.php besser auslesen und verarbeiten?
Oder gibt es eine ganz andere Lösung, von deren Existenz ich leider noch nichts weiss?

Vielen Dank für Tipps! Gruß hermx

‹ Newbie: Grundlegendes Verständnisproblem von themes (+views) [gelöst]Wie mit dem Modul Profile erstellte Felder in der node_blog.tpl.php ansprechen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, wenn Du die Taxonomy

Eingetragen von tumblingmug (872)
am 08.06.2008 - 11:47 Uhr

Ja, wenn Du die Taxonomy nicht neu erfinden willst, würde ich sie benutzen, denn eigtl. ist sie dazu da, das zu tun, was Du da willst ...

Du definierst ein Vokabular, in das Du Deine Kategorien einträgst. Wenn Du das Vokabular bearbeitest, kannst Du es dem speziellen Inhaltstyp zuweisen, für den es gelten soll. Wenn das Vokabular als "erforderlich" konfiguriert wurde, muss beim Speichern von Beiträgen des speziellen Inhaltstyps eine Kategorie ausgewählt werden. Das ist alles Standard.

Habe ich vielleicht Dein Problem nicht ganz verstanden?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für den Hinweis. Ich

Eingetragen von hermx (256)
am 08.06.2008 - 14:54 Uhr

Danke für den Hinweis. Ich denke, du wirst es schon verstanden haben. Mein Problem ist einfach, dass es in drupal meistens mehrere Lösungswege gibt und mir ist, wie vermutlich den meisten Anfängern, nicht immer klar, welches der eigentliche "Drupalweg" ist. Dazu wäre eigentlich so eine Art Anwendngsfall-Datenbank mit Infos zu "best practices" nicht schlecht. (Aber es gibt natürlich auch Bücher dazu ud in bestimmten Fällen geeignete Howto-Seiten...)
Mir ist bisher nur noch nicht klar, wie ich genau auf die Taxonomie innerhalb einer tpl zugreife.

Gruß hermx

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kategorien im Template

Eingetragen von tumblingmug (872)
am 08.06.2008 - 16:27 Uhr
hermx schrieb

... wie ich genau auf die Taxonomie innerhalb einer tpl zugreife.

Das machst Du mit <?php print $terms; ?> in der node.tpl.php bzw. node-CONTENTTYPE.tpl.php, wobei CONTENTTYPE jetzt durch z.B. "page", "story", "blog", "forum" etc., oder auch einen selbstdefinierten Inhaltstyp ersetzt werden kann. Dann gelten die Template-Änderungen jeweils nur für den angesprochenen Inhaltstypen, während das abstraktere node.tpl.php für alle diejenigen Inhaltstypen zuständig ist, die so eine speziellere Template-Datei nicht haben. (Das stimmt so allerdings nicht in jedem Fall, da sich Inhaltstypen natürlich auch noch mit anderen Mitteln im PHP-Code beeinflussen lassen.)

Generell musst Du aber erst einmal gar nichts machen, da die Terms (Kategorien) standardmäßig ausgegeben werden und die Ausgabe <?php print $terms; ?> üblicherweise in jeder Standard-node.tpl.php definiert ist.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke soweit, tumblingmug,

Eingetragen von hermx (256)
am 08.06.2008 - 16:43 Uhr

Danke soweit, tumblingmug, das mit den node.tpl.php habe ich schon verstanden und auch schon angewendet.
Meine Frage ist genau folgende(und ich probiere schon eine weile rum, aber wohl ohne es zu kapieren...):

Ich habe eine hierarchische Taxonomie, sagen wir:

Vokabulare Vok1, Vok2,...
und darin jeweils Unterebenen E12, E12,...,E21,E22,... (E_ij ist Unterebene j in Vokabular i)
und darin Terme T111,T112,...T121,T122,... (T_ijk ist Term k der Unterebene j in Vokabular i)

Was ich nicht hinbekomme, ist eine einfache Abfrage auf einen bestimmten Term:
Wie frage ich in der node-contenttype.tpl.php ab, ob der node einen bestimmten Term enthält?
Also ich will sowas wie:
if (node hat Term Tijk)
schreiben. Was muss in das if rein? ($node->taxonomy...??? oder node_get_taxonomy....??? oder was genau?)

Gibts dazu irgendwo eine klare Erläuterung/Tutorial? (Habe ich bis jetzt leider noch nicht gefunden!)

Danke für Hinweise!
Gruß hermx

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kannst Du bitte die ganze

Eingetragen von tumblingmug (872)
am 08.06.2008 - 19:01 Uhr

Kannst Du bitte die ganze Problemstellung aufzeigen? Ich meine: was hast Du denn dann vor, wenn Du weißt, ob ein bestimmter Term in den $terms drinnen steckt? Also einfach das Ganze bitte mal beschreiben, indem Du den Kopf aus Deinen Problemen so ungefähr einen halben Meter herausziehst :-) und dann versuchst, die ganze Anordnung zu sehen.

Natürlich könnte man versucht sein zu sagen: na dann mach mal ein

<?php
 
if(strpos($terms,'Suchbegriff') !== false) {
      print
"Treffer!";
  }
?>

aber das ist irgendwie unsauber und gehört eigtl. nicht in ein Template.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Anwendungsbeschreibung zu meinem Vorhaben

Eingetragen von hermx (256)
am 08.06.2008 - 22:18 Uhr

Mach ich doch gerne :)

Ich habe eine Schulwebsite und möchte mit einem Inhaltstyp "Beitrag" erreichen, dass alle Fachlehrer kleine inhaltliche Beiträge auf der Website einstellen können. Das soll Fach- und Bereichsspezifisch sein. Ich stelle mir dazu eine Taxonomie der folgenden Art vor:

-Vokabular1: Fach
--Terme: Mathe, Sport, etc.
-Vokabular2: Bereich
--Terme: Fachinfo, Wettbewerbe, Arbeitsgemeinschaften, etc.

Jedes Fach soll dann eine eigene page erhalten mit derselben Abschnittsstruktur, wie sie dem Vokabular2 entspricht. Also Abschnitte mit Überschriften "Fachinfo" Wettbewerbe" etc.

Wenn nun z.B. ein Sportlehrer einen Ergebnisbericht zu einem Wettkampf ins Web setzen will, so soll er einen Inhalt "Beitrag" erstellen und dazu die Taxonomien "Sport" und "Wettbewerbe" auswählen. Der Beitrag sollte dann automatisch auf der Sportfachseite im Abschnitt "Wettbewerbe" als Teaser erscheinen. Letzteres kriege ich mit views und dem Modul insert view hin. Dazu kann man dann einen gefilterten view des Inhaltstyps Beitrag mit Tags in die Seite einbauen (Syntax [view:viewname==arg1,arg2,...]). Die Fachseite sieht dann etwa so aus:

Fachbereich Sport

Allgemeines blablabla

Fachinfo

[view:beiträge==Sport,Fachinfo]

Wettbewerbe

[view:beiträge==Sport,Wettbewerbe]
etc.

Idealerweise sollte die Beitragstemplate node-beitrag.tpl.php nun so sein, dass in den Teasern und der Vollansicht auf den Fachseiten keine Nodetitel und Verfasserinfo angezeigt werden, so dass die ganze Konstruktion optisch nicht anders aussieht (bis auf die links der Teaser zum "Weiterlesen"), als hätte ich die Beiträge direkt auf die Fachseite geschrieben. Ruft man die Beiträge einzeln auf, so soll die ganze Info sichtbar sein. Dieses letzte (unwichtigere) Teilproblem habe ich schon einigermassen im Griff, aber eben bisher ohne die Verwendung von Taxonomie. Dazu möchte ich also in den templates so etwas wie if($term1=='Sport' && $term2=='Wettbewerbe') abfragen können, um eventuell auch Fach- bzw. Bereichsspezifisch Einfluss auf die Darstellung nehmen zu können. (z.B. mit dem Zweck, dass bei bestimmten speziellen Bereichen [z.B. Arbeitsgemeinschaften] die Verfasserinfo doch angezeigt wird, bei Bereichen allgemeiner Natur [z.B. Fachinfo] eher nicht.)

Ich hoffe das erläutert mein Vorhaben einigermassen verständlich. Wäre das ein geeigneter Lösungsansatz oder sollte man sowas eher ganz anders machen?

Nachtrag: Habe gerade im Handbuch den Hinweis auf embeded views gefunden: http://www.drupalcenter.de/handbuch/6804
das könnte auch hilfreich sein.

Nachtrag2: Habe gerade eine ähnliche Diskussion gefunden: http://www.drupalcenter.de/node/6085
D.h. mit so etwas wie if(node->taxonomy[1]->name=='Wettbewerbe') sollte es funktionieren. Ich weiss nur nicht, woher ich den richtigen array index (die [1] hier im Bsp.) meines Vokabulars automatisch herhole?

Nachtrag3:
Konkret aus meinem print_r($node):

[taxonomy] => Array
(
[199] => stdClass Object
(
[tid] => 199
[vid] => 17
[name] => Wettbewerbe
[description] =>
[weight] => 0
)

Hier ist also mein Term "Wettbewerbe" und ich müsste fragen
if(node->taxonomy[199]->name=='Wettbewerbe')
Wie kann ich die Termid (tid, hier 199), bzw. die Vokabularid (vid, hier 17) automatisch erfahren? Oder brauche ich das gar nicht? Kann ich irgendwie mit dem "Klartext" des Terms "Wettbewerbe" arbeiten? (Gibt es sowas wie taxonomy[get_tid("Wettbewerbe")] ?? - vielleicht auch gar nicht sinnvoll, wenn ich den Titel mal ändern wollte...Fragen über Fragen...)

Danke für Hinweise!
Gruß hermx

  • Anmelden oder Registrieren um Kommentare zu schreiben

Aha

Eingetragen von tumblingmug (872)
am 09.06.2008 - 11:49 Uhr

Das hast Du also vor :)
Ich denke, der richtige Hebel für Deine Zwecke (allerdings auch schon nicht mehr in Drupal-6) ist die Funktion _phptemplate_variables(), in welcher zusätzliche Variablen für die Themeausgabe erzeugt bzw. bestehende angepasst werden können und die in die template.php Deines Themes gehört (falls die Funktion dort schon existiert, muss sie eben erweitert werden).

  1. Wenn Du die Variable $submitted in Abhängigkeit von bestimmten zutreffenden Kategorien einmal ausgeben willst und einmal nicht, dann ist o. g. Funktion der richtige Ort, da Du in der node.tpl.php nur zu stehen hast: <?php if ($submitted) print $submitted ?> und das reicht dort auch aus. Aber in der _phptemplate_variables() wird nun anhand Deiner Konditionen entschieden, ob $submitted gerenderten Text enhält und ausgegeben wird oder eben nicht.
  2. Ich würde das Mengenverhältnis bestimmen: soll überwiegend $submitted (Autor + Datum) angezeigt oder nicht angezeigt werden? Der richtige Ort für eine diesbzgl. Einstellung ist die Seite mit den Grundeinstellungen für Themes, wo Du die Anzeige von Autor + Datum ($submitted) für jeden Inhaltstyp gesondert festlegen kannst. Damit würden dann in der _phptemplate_variables() nur noch die Ausnahmen definiert und Du hast in Summe weniger Arbeit :)

Grobes Gerüst für Integration in die template.php:

<?php
function _phptemplate_variables($hook, $vars = array()) {
   switch (
$hook) {
    
// Leeren der Variable $submitted, falls Ausgabe unerwünscht
    
case 'node':
        if (
$vars['type'] == 'beitrag') { // bezogen auf spez. Inhaltstyp
          
$wett = taxonomy_get_term_by_name('Wettbewerbe');
          
$spor = taxonomy_get_term_by_name('Sport');
           if (
$vars['node']->taxonomy[$wett[0]->tid] &&
              
$vars['node']->taxonomy[$spor[0]->tid]) {
                 
// $submitted leeren, keine Ausgabe von Autor + Datum:
                 
$vars['submitted'] = '';
                 
// "if ($submitted)" in node.tpl.php ergibt nun FALSE
                  // und wird nicht ausgegeben
          
}
        }
       break;
   }
   return
$vars;
}
?>

Dieses Beispiel geht davon aus, dass Deine Suchbegriffe nur einmal in Vokabularen vorkommen! Denn $wett[0] ist das erste Element der zurückgegeben Terms (die also durchaus auch mehrere sein können). So würde eine Suche nach "Sport" zwei Elemente zurückgeben, wenn die Terme "Sportereignisse" und "Sport" existierten! Passe den Code an, falls dies absehbar zu Problemen in Deiner Konstellation führen kann.

Also: so ungefähr (alles aus dem Hut, sorry), das Konzept sollte aber klar werden, debugged ist der Code nicht - Du kannst ja vielleicht die Lösung für Dich hierher posten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kategorien eines Beitrags in PHP abfragen

Eingetragen von tumblingmug (872)
am 09.06.2008 - 11:56 Uhr
hermx schrieb

Also ich will sowas wie: if (node hat Term Tijk) schreiben. Was muss in das if rein? ($node->taxonomy...??? oder node_get_taxonomy....??? oder was genau?)
Gibts dazu irgendwo eine klare Erläuterung/Tutorial? (Habe ich bis jetzt leider noch nicht gefunden!)

Als Nachtrag: taxonomy_node_get_terms($nid, $key) ist da vielleicht auch hilfreich. Du kannst nämlich dann fragen:

<?php
$nodeterms
= taxonomy_node_get_terms($nid, 'name');
if (
$nodeterms['Sport'] && $nodeterms['Wettbewerbe']) {
   print
"Mit 'Sport' und 'Wettbewerbe' getaggt!";
}
?>

'name' ist dabei der Trick: die Kategorienamen werden so als Array-Keys verwendet und lassen sich dann natürlich ganz gemütlich abfragen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke, tumblingmug!

Eingetragen von hermx (256)
am 10.06.2008 - 19:47 Uhr

Beide Antworten von dir sind mir sehr hilfeich. Mit phptemplate_variables muss ich mich jetzt erst mal beschäftigen. Ich bin grade so am Anfang mit der Beschäftigung mit dem template-Konzept, aber so weit ich sehe, liefert dein schon sehr konkreter (danke!) Outline eine Lösung für mich. Eventuell genügt sogar dein zweiter Vorschlag.

Danke für die Tipps, ich werde jetzt erst ne Weile dafür brauchen, da ich diese Woch nicht mehr soviel Zeit dafür habe...ich werde dann meine Lösung für die Nachwelt hier posten.

Gruß hermx

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