View, amely csak az adott node-hoz tartozó taxonómiát jeleníti meg.

jaunty képe

Hello,

Panels-t használok és nem tudom, hogyan jelenítsem meg a taxonómia kifejezéseket. A Panelsben nem találok ilyen content típust ezért arra gondoltam egy view kellene, amely megjeleníti az adott node-hoz rendelt kifejezéseket. Hogyan tudok ilyet készíteni? Vagy van egyszerűbb módja a kifejezések megjelenítésének?

Köszönöm.

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

Szerintem te erre gondolsz:
Fogd meg az alábbi kódot és másold a node.tpl.php-ba, azon belül pedig a
 print $content -rész alá, tehát a tartalmi rész alatt fog megjelenni!

<?php if (is_array($node->taxonomy)) {
  foreach($node->taxonomy as $tid => $term)
  	print ($term->name);
}
?>

Amúgy ezt még könnyen fel tudod dobni úgy, hogy ha rákattintasz akkor az adott kifejezésbe tartozó összes tartalmat megjelenítse...

Üdv, Barna

0
0
jaunty képe

Ez jó. Köszönöm.

Akkor még annyit, hogy ténylegesen hogyan csinálok a kifejezésekből linkeket a tartalmakhoz?

Az egyik bejegyzéshez tartozó három kifejezés például: Ana Moura, Fado, Lifestyle.
Ezek most így jelennek meg: ana mourafadolifestyle. Szeretnék közöket a szavak között és hogy linkek legyenek. Azt hogy kell? Köszi.

0
0
barna89 képe

Ez már kicsit akkor közelebb lesz, habár az, hogy miért van nálad kicsi betűvel írva aminek nagynak kellene lennie, az sztem azért van mert a szótárad úgy nevezted el! (ha az a baj írogasd át)
Nálam semmi probléma sincs a kicsi és a nagy betűkkel!

Módosítsad erre az előző kódot:

<?php  if (is_array($node->taxonomy)) {
  foreach($node->taxonomy as $tid => $term)
  { 
    $vocabulary = taxonomy_vocabulary_load($term->vid); ?><a href="/taxonomy/term/<?php print $term->vid; ?>"><?php print ($vocabulary->name); ?></a>
	<?php print " ";
  }
}
?>

Mondjuk ha az utolsó utasítást:

 print " ";  módosítot így: <?php print ", ";
akkor lesz utána mindig vessző.
Ezzel az a baj, hogy még akkor is fog vesszőt tenni, ha nincs következő.
Ennek megoldásán el kellene gondolkodni.
 
Amúgy pl. lehetne mindet új sorban is, akkor nem olyan gáz!
0
0
dj képe

<?php  if (is_array($node->taxonomy)) {
  $print = "";
  foreach($node->taxonomy as $tid => $term) {
    $vocabulary = taxonomy_vocabulary_load($term->vid);
    if ( $vocabulary ) {
       $print .= '<a href="/taxonomy/term/' . $term->vid . '">' . $vocabulary->name . '</a>, ';
    }
  }
  print rtrim( $print, ", " );
}
?>
0
0

Üdv!
Dudás József

barna89 képe

Nem tudod véletlenül, hogy ugyan ezt a kódot tovább fejlesztve nem lehet-e kiíratni egy adott taxonómián vagy kifejezésen belüli node-címeket???
Most ezen elgondolkodtam és nem lenne rossz dolog!

0
0
Illyés Edit képe

Új kérdésnek kérlek indíts új fórumtémát.

0
0
Illyés Edit képe

Nem világos, hogy itt a szótárra miért van szükség. De mindegy is, csak a rend kedvéért jegyzem meg, hogy linkek készítésére biztonsági és egyéb okokból az l() függvényt használjuk (tömbök elemeinek összeragasztására pedig az implode()-ot).

<?php
$output = '';
$links = array();
foreach ($node->taxonomy as $tid => $term) {
  $path = 'taxonomy/term/' . $tid;
  // $path = drupal_get_path_alias($path); Szerk.: most jut eszembe, ez nem kell, az l() magától megkeresi az aliast.
  $links[] = l($term->name, $path);
}
$output = implode(', ', $links);
print $output;
?>
0
0
Illyés Edit képe

Minden node.tpl.php rendelkezésére áll a $terms változó, amiben a taxonómia kategóriák vannak.

<span class="taxonomy"><?php print $terms; ?></span>

A modules/node könyvtárban találod az alapértelmezett node.tpl.php-t, annak a tetején fel van sorolva minden elérhető változó.

0
0
barna89 képe

Rendben legközelebb újat fogok!
Már sikerült megoldani beágyazott SQL-lel!

Üdv: Barna

0
0
Illyés Edit képe

Sminkbe nem való SQL, hidd el. Még ha biztonsági szempontból rendben is van, nehéz karbantartani, és később csak bajod lesz vele. Ezért készítik nekünk a jó Drupal core fejlesztők a sok hasznos változót, hogy ne gányolgassunk.

0
0
aboros képe

íme egy view, ami ezt csinálja:

$view = new view;
$view->name = 'node_terms';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
  'name' => array(
    'label' => '',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'link_class' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'strip_tags' => 0,
      'html' => 0,
    ),
    'link_to_taxonomy' => 1,
    'exclude' => 0,
    'id' => 'name',
    'table' => 'term_data',
    'field' => 'name',
    'relationship' => 'none',
  ),
  'name_1' => array(
    'label' => '',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'link_class' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'strip_tags' => 0,
      'html' => 0,
    ),
    'exclude' => 1,
    'id' => 'name_1',
    'table' => 'vocabulary',
    'field' => 'name',
    'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
  'nid' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'All',
    'title' => '',
    'breadcrumb' => '',
    'default_argument_type' => 'node',
    'default_argument' => '',
    'validate_type' => 'none',
    'validate_fail' => 'not found',
    'break_phrase' => 0,
    'not' => 0,
    'id' => 'nid',
    'table' => 'node',
    'field' => 'nid',
    'validate_user_argument_type' => 'uid',
    'validate_user_roles' => array(
      '2' => 0,
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => '',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'panel' => 0,
      'page' => 0,
      'story' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
      '4' => 0,
      '3' => 0,
      '2' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_transform' => 0,
    'validate_user_restrict_roles' => 0,
    'validate_argument_php' => '',
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
));
$handler->override_option('cache', array(
  'type' => 'none',
));
$handler->override_option('items_per_page', 0);
$handler->override_option('style_plugin', 'list');
$handler->override_option('style_options', array(
  'grouping' => 'name_1',
  'type' => 'ul',
));

figyeld meg, hogy a node id argumentumként szerepel a nézetben, az urlből szedi a node idt. (ha nem talál, nem jeleníti meg a nézetet.) mezőként a kifejezéseket és a szótárakat tartalmazza, utóbbi nem szerepel a megjelenítésben. listát jelenít meg a szótárak szerint csoportosítva. (azért nem szerepel a szótár a megjelenítésben, mert akkor minden listaelemben szerpelne mégegyszer a szótár neve)

egyelőre egy megjelenítőt se állít elő, mert nem tudom hogyan akarod használni. adj hozzá blokkot vagy panel panet vagy amit gondolsz. (akár minden nodenak lehet egy rss csatornája, ami a kifejezéseit tartalmazza.. nem sok értelmét látom :P de lehet:)

sql lekérdezést semmiképpen ne hegessz a sminkbe, még akkor se, ha szabályosan (drupálosan) csinálod. nem lesz jó neked az, hidd el. úgy általában nem látom értelmét, hogy ehhez a feladathoz bármit is buheráljál kód szinten, még ha a kód tiszta és hibátlan, akkor is értelmetlen, erre van a views.

0
0

-
clear: both;