vocabulary név és taxonomy terms

vikicica22 képe

Sziasztok!
Drupal 5.x alatt volt nekem ez a kód:

<?php $vocabs = array(); foreach( (array)taxonomy_node_get_terms_by_vocabulary($nid, 3, $key = 'tid') as $term ) { $vocab = taxonomy_get_vocabulary($term->vid);
if ( !isset($vocabs[$vocab->name]) ) { $vocabs[$vocab->name] = array(); } $vocabs[$vocab->name][] = l($term->name, "taxonomy/term/$term->tid"); }
foreach ( $vocabs as $name => $links ) { print '<div><em>' . $name . ':</em> '; print implode(', ', $links); print '</div>'; } ?>

A szerepe az volt, hogy a 3. kifejezést kiírja a node.tpl.php - ba úgy hogy a kategória neve is ott volt pl.: Egyéb Kiegészítők: Nedves hatású

most, frissítettem a Drupal 6.x-ra mindent és ez nem működik. Kerestem a megoldást erre a dologra, de igazából 6.x alá nem találtam. google://drupal+terms+by+vocabulary

Csak olyanokat találtam ahol az összes kategória nevet és kategóriát kilistázza és nem találtam, olyat ami csak azt írná ki a node.tpl.php amit szeretnék.
A fenti kód ami a 5.x- re jó volt, szerintem nem éppen a legjobb megoldás de működött :):)

Előre is köszönöm a segítséged, üdv: viki

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Webappz képe

A taxonomy_node_get_terms_by_vocabulary függvénynek megváltozott a paraméter listája.
Amíg Drupal 5-ben az első paraméternek az adott node azonosítóját várta, addig Drupal 6-ban már magát a node objektumot várja.
Tehát első lépésben:

taxonomy_node_get_terms_by_vocabulary($nid, 3, $key = 'tid')

helyett, ezt kell írni:

taxonomy_node_get_terms_by_vocabulary($node, 3, $key = 'tid')

Egy másik változás, hogy a Drupal 6-ban már nincs taxonomy_get_vocabulary, ami viszont változatlanul maradt az a taxonomy_get_vocabularies.

Tovább nem boncolgatnám a dolgot, inkább írd le, hogy mit szeretnél megjeleníteni.

0
0

Páldi Zoltán

vikicica22 képe

Van 2db szótáram és azokban vannak a kifejezések:

/taxonomy/edit/vocabulary/3 - Egyéb Kiegészítők: - Nedves hatású, - Száraz hatású

/taxonomy/edit/vocabulary/4 - Hajápoló: - Női, - Férfi

stb.. stb..

A fenti említett drupal 5.X kóddal ki tudtam írni vele a node.tpl.php az hogy ha kiválasztottam és bekültem egy tartalmat, de viszont a (vocabulary/4) -hez tartozó dolgokat nem írta ki ha ki is választottam ott 1-2 kifejezést.
Ezzel lehetett variálni a sorendeken is, vagy bárhova elrendezni a node.tpl.php-ban.
Egyfajta egyedi sminkelésnek is felfogható.

0
0
Webappz képe

Szóval azt szeretnéd, hogy ha beküldesz egy adott tartalom típusba tartozó tartalmat - amit akár több szótárba is besoroltál/besorolhatsz - akkor csak az általad meghatározott szótárból választott kifejezeséket/term jelenítse meg és azokat a term-eket, amelyeket nem ebből a szótárból választottál azokat pedig ne?

Tudnál egy konkrét példát mutatni?

0
0

Páldi Zoltán

vikicica22 képe

Igen.

drupal 5.x-re van sok ilyen példa pl.: itt is http://drupal.org/node/188237#comment-634460

Lehet hogy a megfogalmazásom rossz volt van nem érthető de annyit gondolkozok és agyalok ezeken a dolgokon, hogy már beteges. + éjszaka mikor lefekszek, akkor meg a drupal-al álmodok ahhhhhh....... még álmomban is a menüket nyomkodom ...........

0
0
Sweetchuck képe

Csak kicsit összetettebb a dolog mert ott admin felületről lehet szabályozni a megjelenést
template.php

function phptemplate_preprocess_node(&$vars) {
$vocabularies = taxonomy_get_vocabularies($vars['node']->type);
$output = '';
foreach ($vocabularies as $vocabulary) {
  $vocab_name_safe = str_replace(' ', '_', $vocabulary->name);
  if (theme_get_setting('taxonomy_vocab_display_'. $taxonomy_content_type .'_'. $vocab_name_safe) == 1) {
    $terms = taxonomy_node_get_terms_by_vocabulary($vars['node'], $vocabulary->vid);
    if ($terms) {
      $output .= ($taxonomy_format == 'vocab') ? '<li class="vocab '. $vocab_name_safe .'"><span class="vocab-name">'. $vocabulary->name .':</span> <ul class="vocab-list">' : '';
      $links = array();
      foreach ($terms as $term) {        
	$links[] = '<li class="vocab-term">'. l($term->name, taxonomy_term_path($term), array('attributes' => array('rel' => 'tag', 'title' => strip_tags($term->description)))) .'</li>';        
      }
      $output .= implode(", ", $links);
      $output .= ($taxonomy_format == 'vocab') ? '</ul></li>' : '';
      $output .= (($vocabulary !== end($vocabularies)) && $taxonomy_format == 'list') ? ', ' : '';
    }
  }
}
if ($output != '') {
  $output = '<ul class="taxonomy">'. $output .'</ul>';
}
$vars['terms'] = $output;
}
0
0
vikicica22 képe

Szia!

Itt ki tudod próbálni:

http://vikicica22.extra.hu/

Felhasználói név: demo
Jelszó: demo

Variáld a kifejezéseket. Ez az oldal drupal 5.x-es, és ugye ezt szeretném 6.x-re tenni.

Itt egy 6.x-es kód de ebben nincsen konkréten megadva az, hogy pl. csak a vocabulary/3 legyen ki írva.

<?php
// Code assumes $node is set
if ( $node->taxonomy ) {
$tags = array();
$vocabs = taxonomy_get_vocabularies($node->type);
 
foreach ((array)$node->taxonomy as $term) {
    $tags[$term->vid][] = l($term->name, taxonomy_term_path($term));
}
foreach ( $tags as $vid => $links ) {
  print '<div>' . $vocabs[$vid]->name . ": " . implode(' | ', $links) . '</div>';
}
}
?>
0
0
Sweetchuck képe

template.php

function phptemplate_preprocess_node(&$vars) {
  if (!empty($vars['node']->taxonomy)) {
    //A kulcs a vocabularyID
    $vocs = array(1 => NULL, 2 => NULL);
 
    $links = array();
    foreach ($vars['node']->taxonomy as $term) {
      if (array_key_exists($term->vid, $vocs)) {
        if ($vocs[$term->vid] === NULL) {
          $voc = taxonomy_vocabulary_load($term->vid);
          $vocs[$term->vid] = array($voc->name);
        }
        $vocs[$term->vid][] = l($term->name, taxonomy_term_path($term));
        continue;
      }
 
      // During preview the free tagging terms are in an array unlike the
      // other terms which are objects. So we have to check if a $term
      // is an object or not.
      if (is_object($term)) {
        $links['taxonomy_term_'. $term->tid] = array(
          'title' => $term->name,
          'href' => taxonomy_term_path($term),
          'attributes' => array('rel' => 'tag', 'title' => strip_tags($term->description))
        );
      }
      // Previewing free tagging terms; we don't link them because the
      // term-page might not exist yet.
      else {
        foreach ($term as $free_typed) {
          $typed_terms = drupal_explode_tags($free_typed);
          foreach ($typed_terms as $typed_term) {
            $links['taxonomy_preview_term_'. $typed_term] = array(
              'title' => $typed_term,
            );
          }
        }
      }
    }
 
    $vars['terms'] = theme('links', $links);
 
    $vars['taxonomy_spec'] = '';
    foreach (array_keys($vocs, TRUE) as $vid) {
      $vars['taxonomy_spec'] .= theme('item_list', $vocs[$vid]);
    }
  }
}

egy "eredeti" node.tpl.php -ba csak ennyit pluszt kell írni
 if ($taxonomy_spec) echo '<div>', $taxonomy_spec, '</div>';

0
0
aboros képe

content_taxonomy modullal "mezősítsed" a szótáraidat, ezek után ugyan úgy állíthatod a sorrendet/megjelenésüket, mintha sima cck mezők lennének.

7.x -ben meg úgyis mező lesz a taxonomy is, úgyhogy legalább szokod ;)

0
0

-
clear: both;

vikicica22 képe

Kipróbáltam és tényleg jó ez a content_taxonomy modul, de csak drupal 5.x alatt mert drupal 6.x alatt már nekem nem működik :(
5.x alatt tökéletesem működik az adatok megjelentenek a mezőkben de már ezek az adatok a 6.x alatt nem jelenik meg a frissítés után csak akkor ha újra bejelölöm azokat és beküldöm, de hiszen éppen az a lényege ennek, hogy ne keljen újra minden egyes node-on végig menni. Kipróbáltam frissítés nélkül a 6.x alatt de úgy is ugyanazt a jelenséget produkálta, majd ezek után mindenféle variációt és kombinációt is kipróbáltam már ezzel kapcsolatban de semmi.
Esetleg tudnál ebben segíteni, hogy te hogyan csináltad és melyik modullal (6.x-1.0-rc2)?? egy régebbi 6.x modult is feltettem de szintén ugyan ez történt vele.
"Többes értékek" pipa lehetőség van a 5.x alatt de pl. ez már nincsen a 6.x -ben.
Esetleg valami kiegészítő modult fel kell tenni, hozzá, hogy tökéletesen működjön?
Várom a válaszod és előre is köszönöm a segítséged.

0
0
Den képe

A content taxonomy egy új field típust biztosít. Hozzá kell adni külön a node-hoz.

Ez azt csinálja, hogy egy új adatbázis mezőt hoz létre. Ennek az a hátránya, hogy nem veszi át a term táblából automatikusan az eddigi term bejegyzéseket.

Illetve, a mezőnél be kell állítani (már ha kell, persze), hogy a term táblába is jegyezze be a termeket, ne csak ebbe az újonnan létrejött mezőbe.

Röviden: egy jól irányzott sql-el helyre tudod tenni a dolgokat és utána már működni fog a dolog. Pont most kellett egy ilyet csinálnom.

A tábla szerkezetet ismerve nem túl bonyolult egy ilyet megírni.

Elméletileg, a content taxonomy modul is megcsilhatná ezt automatikusan... Lesz egy kis időm, akkor belenézek a modulba. De addig is, tábla szerkezetét mutasd meg.

0
0
vikicica22 képe

Mindent úgy csináltam, ahogyan Te és aboros is leírta, csak éppen nem tudtam megfogalmazni jól a dolgokat sajnos.

Akkor kiderült, hogy a 6.x változatban nem viszi át automatikusan a dolgokat, hanem csak, úgy ha a mysql - be is belenyúlok.

"De addig is, tábla szerkezetét mutasd meg" itt az egész msql-re gondolsz vagy azon belül melyik részt kell, hogy ide kimásoljam neked?

+ még egy kérdés a drupal 5.x -ben van olyan hogy "Többes értékek" ez a lehetőség nincsen meg a 6.x ben vagy csak én nem vettem észre?

0
0
Den képe

"De addig is, tábla szerkezetét mutasd meg" itt az egész msql-re gondolsz vagy azon belül melyik részt kell, hogy ide kimásoljam neked?

Elég az adott tartalom táblája. A term tábla mindenütt ugyanaz.

A +-ra nem tudom a választ, 5-ös drupalt nem is láttam. :)

0
0
aboros képe

én használom ezt és hibátlanul megy.
parába is lennék, ha nem lenne ez a modul.

viszi a term táblába is.

persze ha úgy kapcsolod be és raksz be mezőt egy típusba, hogy már van olyan nodeod ezer meg azok termekhez is vannak rendelve, akkor a már létező term értékeket lehet nem veszi fel az új meződ.. sose próbáltam ezt. ez a hiba?

0
0

-
clear: both;

vikicica22 képe

Igen ez a hiba:)
Furcsállom, hogy a drupal 5.x (content_taxonomy-5.x-1.x-dev.tar.gz) alatt tökéltessen, átviszi, a meglévő dolgokat = megjegyzi a „term”eket, míg a drupal 6.x (content_taxonomy-6.x-1.0-rc2.tar.gz) alatt nem.

0
0