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

Terms als Block? Das muss doch gehen!

Eingetragen von drupalone (128)
am 27.08.2007 - 17:01 Uhr in
  • Allgemeines zu Drupal
  • Drupal 5.x

Eigendlich ist es mir echt schon peinlich das zu fragen, weil das was ich will eigendlich recht simpel sein müsste.
Allerdings bin ich da jetzt schon einige Tage drann, und echt am verzweifeln!!!!

Wie kann ich die Taxonomie Terms, die zu einem Artikel gehören, in einem extra Block anstatt am ende eines Artikels anzeigen lassen?

Ich bekomme echt die Kriese! Ich hab schon versucht das mit views zu machen, hab nach Modulen gesucht die sowas machen.... NIX!!!! Das kann doch einfach nicht sein. Ich bin doch nicht der erste Mensch der sowas machen will, oder?

Bitte helft mir! :-)

‹ PHP statt Pfad node/add themen? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

PHP

Eingetragen von drubb (580)
am 27.08.2007 - 21:30 Uhr

Hallo,

ich kann es auf die Schnelle nicht programmieren, aber im Prinzip musst du folgendes machen:

Erstelle einen Block mit PHP-Code. Darin musst Du prüfen, ob gerade ein Node angezeigt wird (über die URL, also arg() Funktion), dann über dessen Node ID (ebenfalls aus der URL) diesen Node holen und das dazugehörende Taxonomy Objekt auswerten bzw. ausgeben.

In etwa so (zusammenkopiert und ungeprüft):

<?php
if ((arg() == 'node') && is_numeric(arg(1))) {
 
$artikel = node_load(arg(1));
  print
$artikel->taxonomy[0]->name . '<br />';
  print
$artikel->taxonomy[1]->name . '<br />';
  ...
}
?>

Keine Gewähr für die Print-Anweisungen, bin kein PHP-Experte. Macht man auch eleganter in einer Schleife.

Gruß,
Boris

  • Anmelden oder Registrieren um Kommentare zu schreiben

Oder ...

Eingetragen von profix898 (140)
am 27.08.2007 - 22:22 Uhr

Oder versuch mal folgendes Snippet:

<?php
if (arg(0) == 'node' && is_numeric($nid = arg(1))) {
 
$terms = taxonomy_node_get_terms($nid);
 
$items = array();
  foreach (
$terms as $term) {
   
$items[] = l($term->name, 'taxonomy/term/'. $term->tid);
  }
  print
theme('item_list', $items);
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Oder als View

Eingetragen von md (3717)
am 27.08.2007 - 23:55 Uhr

Wie in diesem Thread http://www.drupalcenter.de/node/4710#comment-16054 schon erklärt.

vg
--
md - DrupalCenter

mdwp* :: Drupal Services

  • Anmelden oder Registrieren um Kommentare zu schreiben

Juhu! :-)

Eingetragen von drupalone (128)
am 28.08.2007 - 09:27 Uhr

Also mit dem Code von "profix898" komme ich super klar. Das ist genau was ich wollte. Viele Dank

  • Anmelden oder Registrieren um Kommentare zu schreiben

Weiss vielleicht auch jemand

Eingetragen von clown10 (15)
am 29.11.2008 - 03:29 Uhr

Weiss vielleicht auch jemand wie das in drupal 6 funktioniert?

der Code tuts bei mir jedenfalls nicht.

Danke.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Tagadelic?

Eingetragen von narres (348)
am 29.11.2008 - 08:43 Uhr

Das Modul tagadelic stellt einen Block "Tags for the current post" zur Verfügung.
---
@ http://drupalcamp.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank Irgendwie hatte

Eingetragen von clown10 (15)
am 29.11.2008 - 13:29 Uhr

Vielen Dank

Irgendwie hatte ich in Erinnerung, dass es dieses Modul nur für D5 gibt. Mal ausprobieren.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe dieses Snippet

Eingetragen von clown10 (15)
am 29.11.2008 - 13:32 Uhr

Ich habe dieses Snippet gefunden was es tut:

<?php
if (module_exists('taxonomy')) {
  if (
arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
    if (
$node = node_load(array('nid' => arg(1)))) {
     
$terms = taxonomy_link('taxonomy terms', $node);
      return
theme('links', $terms);
    }
  }
}
return
'';
?>

Wenn ich jetzt die ausgegebenen terms noch nach vocabulary sortieren könnte wäre ich da.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was macht dieser Code?

Eingetragen von quiptime (4972)
am 29.11.2008 - 13:57 Uhr

Bei mir wuerde der Code so aussehen:

<?php
if (module_exists('taxonomy')) {
  if (
arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
    if (
$node = node_load(arg(1))) {
      return
theme('links', taxonomy_link('taxonomy terms', $node));
    }
  }
}
else {
  return
'';
}
?>

Der Code wird ausgefuehrt wenn die URL /node/x ist (und nicht das Bearbeiten der Node ausgefuehrt wird). Ist das Modul Taxonomy aktiviert dann wird das Nodeobject geladen.
Kann das Nodeobject geladen werden dann werden die Terms der Node als Link zurueckgegeben.

Deinem Codesnipped fehlt aber etwas:

Das "return" ist das Indiz das dieser Code eigentlich in einer Funktion ausgefuehrt wird. Um diesen Code ohne eine Funktion einzusetzen muss dies passieren:

<?php
if (module_exists('taxonomy')) {
  if (
arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
    if (
$node = node_load(arg(1))) {
     
$output = theme('links', taxonomy_link('taxonomy terms', $node));
    }
  }
}
else {
 
$output = '';
}
print
$output;
?>

 
Will man aber den Code mit einer Funktion verwenden, beispielsweise um ihn nur EINMAL zu schreiben UND ihn dann von verschiedenen Stellen aus aufzurufen muss dies passieren:

<?php
function node_get_term_links() {
 
$output = '';
 
  if (
module_exists('taxonomy')) {
    if (
arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
      if (
$node = node_load(arg(1))) {
       
$output = theme('links', taxonomy_link('taxonomy terms', $node));
      }
    }
  }
 
  return
$output;
}
?>

Diesen Code koennte man beispielsweise in der Datei "template.php" speichern.

Und dann irgendwo, in einem Block oder in verschiedenen Nodetype Templates, die Funktion ansprechen mit:

<?php
print node_get_term_links();
?>

 
@clown10,

um die Terms nach Vocabularys zu sortieren muss man sich den Inhalt der Variable $terms ansehen. Fuer diesen Fall muss dies Variable doch bereitgestellt werden:

<?php
     
if ($node = node_load(arg(1))) {
       
$output = theme('links', taxonomy_link('taxonomy terms', $node));
      }
?>

aendern in:

<?php
     
if ($node = node_load(arg(1))) {
       
$terms = taxonomy_link('taxonomy terms', $node);
       
$output = theme('links', $terms);
      }
?>

Je nach dem was $term als Inhalt anbietet koennte man mit Array-Funktionen von PHP sortieren. $term ansehen:

<?php
     
if ($node = node_load(arg(1))) {
       
$terms = taxonomy_link('taxonomy terms', $node);
        print
'<pre>';
       
print_r($terms);
        print
'</pre>';
       
$output = theme('links', $terms);
      }
?>

Das Ganze wird so aber nix bringen weil im Array $terms keine Infos ueber die Vocabularies enthalten sind. Um also die Terms nach ihren Vocabularies sortieren zu koennen muss diese Information zusaetzlich eingeholt werden.

Unter diesem Aspekt aber sollte man gleich anders vorgehen und die Funktion taxonomy_node_get_terms() verwenden. Damit ist man gleich Sortier-Ziel angelangt, den taxonomy_node_get_terms() gibt die Terms sortiert nach Vocabularies zurueck.

taxonomy_node_get_terms schrieb

Find all terms associated with the given node, ordered by vocabulary and term weight.

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

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Quiptime,

Eingetragen von clown10 (15)
am 29.11.2008 - 14:20 Uhr

Hallo Quiptime, super!

Könnte man so auch irgendwie die terms ( sind bei mir immer 3 ) in explizite variablen schieben (variable 1, variable 2, variable 3) und daraus einen link bauen wie z.B. planzen?tid=blume&tid_1=wohnung&tid_2=rot wobei blume, wohnung und rot die terms sind?

Ich möchte hiermit einen view aufrufen (in abhängigkeit von dem grade besuchten Node).

  • Anmelden oder Registrieren um Kommentare zu schreiben

@clown10, Ja kann man.

Eingetragen von quiptime (4972)
am 29.11.2008 - 14:34 Uhr
Zitat:

und daraus einen link bauen

Ja kann man.

Aber die Links wie Du sie bauen willst sind fuer die Verwendung mit einem View der auf Argumente reagiert eigentlich anders aufzubauen.

Was macht ein View der Argumente in seiner URL verarbeitet. Er erwartet/verwendet eine URL nach dem Schema: /irgendeinview/x

Im View selbst wird die URL so definiert.

Drupal 5: irgendeinview/$arg
Drupal 6: irgendeinview/%

@clown10, ist Dir klar geworden das Deine Ueberlegung

clown10 schrieb

einen link bauen wie z.B. planzen?tid=blume&tid_1=wohnung&tid_2=rot

nicht funktionieren wird weil Du keinen View fuer derartige Link's/URL's erstellen kannst.

mehrere Argumente fuer einen View

Ergaenzend ist noch zu bemerken das mit Views 2 (D6) ein View derart konfiguriert werden kann das er mehrere Argumente entgegen nehmen kann.
Nach dem URL-Schema: /irgendeinview/x/x/x

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

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bei mir sieht der link aber

Eingetragen von clown10 (15)
am 29.11.2008 - 14:59 Uhr

Bei mir sieht der link aber genau so aus und funktioniert. Was Du vorschlägst ( /irgendeinview/x/x/x ) fänd ich auch schöner ( hier ist ja letzlich nur das ?tid= durch das / ersetzt). Aber wie kann ich das in views so einstellen oder aber den link mit den vorhandenen terms bauen?

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

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

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 0 User und 13 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