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

Terms durch Komma separiert ausgeben

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 08:41 Uhr in
  • Themes & Theming
  • Drupal 5.x

Ich verwende das Garland/Minelli-Theme und bin gerade dabei einige Anpassungen vorzunehmen. Leider reichen meine PHP-Kenntnisse nicht aus um folgendes Problem in den Griff zu kriegen.

Standardmässig werden die Terms ja als Liste ausgegeben. Ich möchte nun das die einzelnen Terms mit Komma separiert werden, wie folgt:

Term 1, Term 2, Term 3, etc.

Natürlich habe ich mich auch auf Drupal.org umgesehen, leider aber nur Ansatzweise Hilfe gefunden. Folgenden Code habe ich in die Datei node.tpl.php kopiert.

if ($terms):
$vocabularies = taxonomy_get_vocabularies();
         foreach($vocabularies as $vocabulary) {
           if ($vocabularies) {
             $terms = taxonomy_node_get_terms_by_vocabulary($node->nid, $vocabulary->vid);
             if ($terms) {
               foreach ($terms as $term) {
                 print l($term->name, 'taxonomy/term/'.$term->tid) . ', ';
               }

             }
           }
         }
endif;

Das funktioniert gut, jedoch wird das Komma auch nach dem letzten Term angezeigt, was natürlich nicht sein soll. Ich habe gelesen das man sowas mit der Implode-Funktion hinbekommen kann. Nach stundenlangem herum experimentieren hab ich es nun aber aufgegeben. Es wäre super wenn mir jemand auf die Sprünge helfen könnte.

‹ Problem mit Menu - Abstand zwischen Menupunkten UID und Username an externe Seite übergeben ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Da laeuft eine Schleife.

Eingetragen von quiptime (4972)
am 16.11.2007 - 09:06 Uhr

Da laeuft eine Schleife. Einen Counter mit 0 starten. Wenn 0 kein Komma. Komma links printen.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nunja, da hätte ich auch

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 09:21 Uhr

Nunja, da hätte ich auch selbst drauf kommen und mir damit dieses Topic sparen können. ;) In der Theorie hört sich das einfach an, aber ehrlich gesagt weiß ich einfach nicht wo und wie ich ansetzen soll.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sollte so funktionieren

Eingetragen von quiptime (4972)
am 16.11.2007 - 09:42 Uhr

<?php
if ($terms):
$vocabularies = taxonomy_get_vocabularies();
  foreach(
$vocabularies as $vocabulary) {
    if (
$vocabularies) {
     
$terms = taxonomy_node_get_terms_by_vocabulary($node->nid, $vocabulary->vid);
      if (
$terms ) {
       
$i = 0;
        foreach (
$terms as $term ) {
          if (
$i > 0) {
            print
' ,' . l($term->name, 'taxonomy/term/'.$term->tid);
          } else {
            print
l($term->name, 'taxonomy/term/'.$term->tid);
          }
         
$i++;
        }
      }
    }
  }
endif;
?>

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider nicht ganz

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 09:57 Uhr

Solange ich mit nur einem Vokabular arbeite funktioniert es gut. Jedoch verwende ich z.B. für die News 2 Vokabulare. Eines um feste Kategorien vorzugeben und ein weiteres für FreeTagging. Also es sieht folgendermaßen aus:

Vok1Term1, Vok1Term2Vok2Term1, Vok2Term2, VokTerm3

Es wird also nach der Auflistung aus Vokabular 1 kein Komma gesetzt. Ansonsten bringt mich das natürlich schon ein ganzes Stück weiter. Vielen Dank für die Hilfbereitschaft.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dann setze den Counter mit

Eingetragen von quiptime (4972)
am 16.11.2007 - 10:07 Uhr

Dann setze den Counter mit der 1. Schleife ein.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dann wird aber schon vor dem

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 10:12 Uhr

Dann wird aber schon vor dem ersten Term ein Komma gesetzt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Naja, eigentlich ist die

Eingetragen von quiptime (4972)
am 16.11.2007 - 10:22 Uhr

Naja, eigentlich ist die Vorgehensweise, die Links der Terms in der "node.tpl.php" zu aendern, nicht unbedingt der goldene Drupalweg. Besser ist, dies in der "template.php" zu tun.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich nehme alles zurück und behaupte das Gegenteil

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 10:25 Uhr

Den Counter mit der ersten Schleife einzusetzen funktioniert tadelos. Danke dafür. Du hast natürlich recht und ich werde jetzt mal sehen wie ich das ganze in der template.php unterbringen kann.

  • Anmelden oder Registrieren um Kommentare zu schreiben

$hook == 'node'

Eingetragen von quiptime (4972)
am 16.11.2007 - 10:54 Uhr

In der "node.tpl.php" wird die Variable $links verwendet. In der "template.php" wird sie veraendert. Nun kommt es auf Dein Theme an. Eventuell gibt es da bereits einen Einstiegspunkt fuer if ($hook == 'node').

Als Hilfe hier ein Ansatzpunkt: http://drupal.org/node/104200#comment-182143

<?php
function _phptemplate_variables($hook, $variables)
{
 
$ours = array();

  if (
$hook == 'node') { // engine is outputing a node
   
$node = $variables['node'];
   
// override the $links variable (which is used in node.tpl.php)
   
$ours['links'] = $node->links ? theme('links', $node->links, ..., '*') : '',
  }

  return
$ours;
}
?>

Den Code kannst Du so nicht direkt uebernehmen. Er diehnt nur der Erlaeuterung des Prinzips. Es kommt darauf an wie die "template.php" Deines Themes aussieht.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_link_alter

Eingetragen von quiptime (4972)
am 16.11.2007 - 12:02 Uhr

Hier noch ein anderer Loesungsansatz. http://blamcast.net/articles/remove-taxonomy-custom-nodes

Der Vollstaendigkeit halber:
http://api.drupal.org/?q=api/function/hook_link_alter/5

Ich hoffe das ueberfordert Dich Jetzt nicht.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für deine Hilfe.

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 13:46 Uhr

Danke für deine Hilfe. Leider muß ich eingestehen das mein Verständnis für die PHPTemplate-Engine hier auf seine Grenzen stößt und ich wohl viel nachzuholen habe. Ich habe mir die Artikel unter deinen Links genauestens durchgelesen, jedoch sind das für mich größtenteils böhmische Döfer. ;)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du moechtest konnen wir

Eingetragen von quiptime (4972)
am 16.11.2007 - 14:15 Uhr

Wenn Du moechtest konnen wir Deine Grenzen ein wenig erweitern.

Welches Theme verwendest Du?

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Na klar möchte ich. Ich

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 14:28 Uhr

Na klar möchte ich. Ich verwende derzeit das Garland-Theme. Ursprünglich wollte ich ein neues Theme erstellen, aber da die Seite recht schnell online gehen soll habe ich mich entschieden mit den Inhalten anzufangen und später ein Theme basteln.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Garland: $hook == 'node' - Teil 1

Eingetragen von quiptime (4972)
am 16.11.2007 - 15:19 Uhr

Ich nehme an Du moechtest die Ausgabe der Terms generell aendern, nicht nur bei einem bestimmten Modul oder Inhaltstyp. Deswegen nehmen wir mal diese Variante: http://drupal.org/node/104200#comment-182143

Bei Garland sieht der fuer die Aenderung in Frage kommende Codebereich der "template.php" so aus:

<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
  if (
$hook == 'page') {

    if (
$secondary = menu_secondary_local_tasks()) {
     
$output = '<span class="clear"></span>';
     
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
     
$vars['tabs2'] = $output;
    }

   
// Hook into color.module
   
if (module_exists('color')) {
     
_color_page_alter($vars);
    }
    return
$vars;
  }

 
/* Hier werden wir versuchen zu aendern */

 
return array();
}
?>

Hier ist von einer Variable $links, die in der "node.tpl.php" verwendet wird, noch nichts zu sehen. Bis Jetzt. Das werden wir versuchen zu aendern.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, das hört sich gut an.

Eingetragen von Ghostwriter (64)
am 16.11.2007 - 19:53 Uhr

Ok, das hört sich gut an. :)

Allerdings muss ich dazu sagen, dass ich in diesem Bereich schon eine Änderung vorgenommen habe. Ich habe das Taxonomy Image-Modul installiert und entsprechend den benötigten Code an diese Stelle kopiert.

Es sieht also bei mir folgendermaßen aus:

<?php
function _phptemplate_variables($hook, $vars) {
  if (
$hook == 'page') {

    if (
$secondary = menu_secondary_local_tasks()) {
     
$output = '<span class="clear"></span>';
     
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
     
$vars['tabs2'] = $output;
    }

   
// Hook into color.module
   
if (module_exists('color')) {
     
_color_page_alter($vars);
    }
    return
$vars;
  }
  if (
$hook == 'node') {
    if (
module_exists("taxonomy_image")) {
       foreach (
taxonomy_node_get_terms($vars['node']->nid) as $term) {
       
$vars['taxonomy_images'][] = taxonomy_image_display($term->tid, "alt='$term->name'");
       }
    }
  }
return
$vars;
  return array();
}
?>

Ja die Darstellung der Terms würde ich gerne generell ändern, auch wenn eine großartige Kategorisierung vorerst nur bei den News statt finden wird. Für die Zukunft plane ich evtl. so etwas wie Userblogs und spätestens dann wird es von Vorteil sein.

Vielleicht interessiert dich auch, worum es eigentlich geht. www.superman-returns.info will ich nun endlich mit Drupal umsetzen und damit Web2.0 tauglich machen. Geplant ist das schon seit über einem Jahr, aber erst jetzt finde ich die Zeit und nötige Motivation dazu.

  • Anmelden oder Registrieren um Kommentare zu schreiben

beliebiger Separator zwischen die Terms

Eingetragen von quiptime (4972)
am 17.11.2007 - 01:08 Uhr

Vergiss die oben von mir gepostete Einleitung zur Erklaerung, ein Komma zwischen die Terms zu setzen.

Der einfachste Weg ist dieser:

.taxonomy ul.links li:after {
  content: ",";
}
.taxonomy ul.links li.last:after {
  content: "";
}

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Oha

Eingetragen von Ghostwriter (64)
am 17.11.2007 - 01:46 Uhr

Ich beschäftige mich ja schon eine Weile mit HTML und CSS aber das ist mir absolut neu, wenn es auch sofort einleuchtet. Ich habe noch nie darüber nachgedacht x-beliebige Zeichen per CSS einzufügen und danke Dir für diese, für mich, ganz neue Erkenntnis.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zeichen per CSS einfügen

Eingetragen von md (3717)
am 17.11.2007 - 13:11 Uhr

Das funktioniert leider nicht im IE 6.

vg
--
md - DrupalCenter

mdwp* :: Drupal Services

  • Anmelden oder Registrieren um Kommentare zu schreiben

Korrekt. http://www.css4you.d

Eingetragen von quiptime (4972)
am 17.11.2007 - 13:38 Uhr

Korrekt.

http://www.css4you.de/beforeafter.html

Der IE(6) ist ja auch kein Browser.

Bleibt eben nur, einen Komma-Separator per HTML einzufuegen. Gerade bei den Terms ist es aber arg verbaut um effektiv/einfach an die Terms ranzukommen. Die gegenwaertige Situation trotz hook und Co finde ich als nicht designerfreundlich.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Den IE6 werde ich nur

Eingetragen von Ghostwriter (64)
am 18.11.2007 - 04:56 Uhr

Den IE6 werde ich nur bedingt berücksichtigen (Layout) und wenn da nun die Seperatoren bei den Terms fehlen ist das kein Beinbruch. Die Lösung per CSS ist damit mein absoluter Favorit.

Nachtrag: Ich habe das jetzt ausprobiert und wie es aussieht kann auch der IE7 mit den Anweisungen nichts anfangen. :(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ist ja interessant. Ich

Eingetragen von quiptime (4972)
am 18.11.2007 - 04:59 Uhr

Ist ja interessant. Ich hatte zu dem Thema gestern gegoogelt und da war ueberall zu lesen das der IE7 before/after kann.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

before/after & IE7

Eingetragen von wenamun@drupal.org (148)
am 18.11.2007 - 08:54 Uhr

bei selhtml steht explizit, dass auch der IE7 before/after nicht unterstützt:
http://de.selfhtml.org/css/eigenschaften/pseudoformate.htm#before_after

selfhtml scheint verlässlicher zu sein als google ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

danke, ein sehr hilfreicher

Eingetragen von headkit (514)
am 20.11.2007 - 17:11 Uhr

danke, ein sehr hilfreicher thread!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie nur ein Vocabulary auslesen

Eingetragen von miweb (201)
am 03.03.2009 - 20:42 Uhr

Das ist wirklich ein guter Thread. Ich schieße den mal wieder nach oben mit einer Zusatzfrage.

Wie kann man den ganz oben stehende php-Code zur Ausgabe der Terms so verändern, dass nur eins der genutzten Vokabularien ausgespuckt wird?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Implode

Eingetragen von RalfZosel (61)
am 07.02.2010 - 08:23 Uhr

Im Ausgangsbeitrag wurde die Implode-Funktion angesprochen. Dazu habe ich folgenden Code-Schnipsel gefunden:

http://19thstreetdesign.com/blog/2009.01.07/adding-separator-drupal-taxo...

  • 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 21 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 13 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 12 Stunden
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • 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 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 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 21 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