Taxonomy mit Views anpassen!?
am 30.01.2008 - 09:48 Uhr in
Moin,
Habe in der Taxonomy einige Vokabulare mit verschiedenen Begriffen.
Vokabular1
-Begriff1
-Begriff2
...
Vokabular2
-Begriff1
-Begriff2
...
usw
Nun möchte ich mit Views die Node-Ansicht BESTIMMTER Vokabulare anders anzeigen. (Also beim Klicken auf einen Taxonomy-Begriff, soll eine "List-View" anstatt der standardmäßigen "Teaser-List" angezeigt werden.
Wichtig ist mir hierbei, dass sich das NUR AUF BESTIMMTE Vokabulare auswirkt. In meinem Beispiel nur auf die Taxonomybegriffe meines Inhaltstypen X und NICHT auf die Blog-Taxonomy.
Irgendwie bekomme ich das nicht hin, deshalb hier meine Gedankengänge:
1. Unter Views die Voreinstellung "taxonomy_term" einschalten und eine Views hinzufügen. Dadurch werden alle Taxonomy-Views überschrieben.
2. In den sich nun öffnenden Views-Einstellungen habe ich folgende Änderungen vorgenommen:
Problem: Diese Änderungen wirken sich auf ALLE Begriffe ALLER Vokabulare aus.
Frage: Wie kann diese Ansicht nur für BESTIMMTE Vokabulare / Begriffe beschränken??????
Danke für eure Hilfe!
- Anmelden oder Registrieren um Kommentare zu schreiben
Vielleicht kommst Du mit dem
am 30.01.2008 - 09:56 Uhr
Vielleicht kommst Du mit dem VIEWS-Argument-Handling Code weiter. (unter den Argumenten zu finden)
Junker schrieb Frage: Wie
am 30.01.2008 - 09:57 Uhr
Frage: Wie kann diese Ansicht nur für BESTIMMTE Vokabulare / Begriffe beschränken??????
Das müsste mit einer Kombination aus einem View und dem Taxonomy Redirect Modul möglich sein:
http://drupal.org/project/taxonomy_redirect
Mit dem Redirect modul
am 30.01.2008 - 10:20 Uhr
Mit dem Redirect modul funktioniert es nicht.
Und von Argument-Code habe ich keine Ahnung :(
Weiß einfach nicht
am 30.01.2008 - 16:22 Uhr
Weiß einfach nicht weiter...
Sitz schon zwei Tage vor diesem Problem und komme nicht weiter...
Wäre super, wenn noch jemand einen Rat geben könnte...
Eine Idee: Theming
am 30.01.2008 - 17:41 Uhr
Eine Idee: Theming
Für taxonomy/term nun eine neue template seite generieren - bin mir nicht sicher, könnte aber dann so aussehen
page-taxonomy-term.tpl.php
Und dort dann abhängig vom term bzw dessen Vokabular mit theme_views, das eine oder andere VIEW ausgeben.
<?php
$id = arg(2); //arg(0) = 'taxonomy', arg(1) = 'term'
$term = taxonomy_get_term($tid)
if ($term->vid == 1){
theme_views('taxview1',...);
}
else{
theme_views('taxviewsonst',...);
}
?>
Hab keine Ahnung wie ich das
am 30.01.2008 - 19:24 Uhr
Hab keine Ahnung wie ich das konkret machen soll :(
Welches Theme benutzt Du denn?
am 30.01.2008 - 19:52 Uhr
Welches Theme benutzt Du denn? ... bzw. Template?
http://drupal.org/node/104316
Ich nutze das
am 31.01.2008 - 12:08 Uhr
@hasi
Auf diese Seite bin ich auch schon gestoßen, aber wie gesagt... das ist nicht so mein Ding.
Man müßte eine templateseite erstellen, für welche die "taxonomy/term" regeln nicht gelten / oder nur für diese gelten.
Wenn mir das jemand an einem Beispiel erklären könnte, wäre super...
Wenn das zu aufwendig ist, lasse ich mir das auch über Skype oder ICQ erklären.
Skpye: "jimmyjonnyjack"
ICQ: 81116166
Ich nutze das itheme
http://drupal.org/project/itheme
Ich habe jetzt mal der
am 31.01.2008 - 14:28 Uhr
Ich habe jetzt mal der template.php von itheme eine itheme_page()-function hinzugefügt.
Da die standard phptemplate_page dadurch überschrieben wird, musste deren ganzer Code kopiert werden.
Die drupal_add_js-Anweisungen sind noch aus dem orginal itheme template.php:
<?php
drupal_add_js(drupal_get_path('theme', 'itheme') . '/js/jquery.cookie.js', 'theme');
drupal_add_js('cookiePath = "' . base_path() . '";', 'inline');
drupal_add_js(drupal_get_path('theme', 'itheme') . '/js/itheme.ui.js', 'theme');
function itheme_page($content, $show_blocks = TRUE) {
/* Set title and breadcrumb to declared values */
if (drupal_is_front_page()) {
$mission = filter_xss_admin(theme_get_setting('mission'));
}
/* Add favicon */
if (theme_get_setting('toggle_favicon')) {
drupal_set_html_head('<link rel="shortcut icon" href="'. check_url(theme_get_setting('favicon')) .'" type="image/x-icon" />');
}
// Populate sidebars
$layout = 'none';
if ($show_blocks) {
global $sidebar_indicator;
/**
* Sidebar_indicator tells the block counting code to count sidebars separately.
*/
$sidebar_indicator = 'left';
$sidebar_left = theme('blocks', 'left');
if ($sidebar_left != '') {
$layout = 'left';
}
$sidebar_indicator = 'right';
$sidebar_right = theme('blocks', 'right');
if ($sidebar_right != '') {
$layout = ($layout == 'left') ? 'both' : 'right';
}
$sidebar_indicator = NULL;
}
// Construct page title
if (drupal_get_title()) {
$head_title = array(strip_tags(drupal_get_title()), variable_get('site_name', 'Drupal'));
}
else {
$head_title = array(variable_get('site_name', 'Drupal'));
if (variable_get('site_slogan', '')) {
$head_title[] = variable_get('site_slogan', '');
}
}
$variables = array(
'base_path' => base_path(),
'breadcrumb' => theme('breadcrumb', drupal_get_breadcrumb()),
'closure' => theme('closure'),
'content' => $content,
'feed_icons' => drupal_get_feeds(),
'footer_message' => filter_xss_admin(variable_get('site_footer', FALSE)) . "\n" . theme('blocks', 'footer'),
'head' => drupal_get_html_head(),
'head_title' => implode(' | ', $head_title),
'help' => theme('help'),
'language' => $GLOBALS['locale'],
'layout' => $layout,
'logo' => theme_get_setting('logo'),
'messages' => theme('status_messages'),
'mission' => isset($mission) ? $mission : '',
'primary_links' => menu_primary_links(),
'search_box' => (theme_get_setting('toggle_search') ? drupal_get_form('search_theme_form') : ''),
'secondary_links' => menu_secondary_links(),
'sidebar_left' => $sidebar_left,
'sidebar_right' => $sidebar_right,
'site_name' => (theme_get_setting('toggle_name') ? variable_get('site_name', 'Drupal') : ''),
'site_slogan' => (theme_get_setting('toggle_slogan') ? variable_get('site_slogan', '') : ''),
'css' => drupal_add_css(),
'styles' => drupal_get_css(),
'scripts' => drupal_get_js(),
'tabs' => theme('menu_local_tasks'),
'title' => drupal_get_title()
);
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$variables['node'] = node_load(arg(1));
}
// Build a list of suggested template files in order of specificity. One
// suggestion is made for every element of the current path, though
// numeric elements are not carried to subsequent suggestions. For example,
// http://www.example.com/node/1/edit would result in the following
// suggestions:
//
// page-node-edit.tpl.php
// page-node-1.tpl.php
// page-node.tpl.php
// page.tpl.php
$i = 0;
$suggestion = 'page';
$suggestions = array($suggestion);
while ($arg = arg($i++)) {
$suggestions[] = $suggestion . '-' . $arg;
if (!is_numeric($arg)) {
$suggestion .= '-' . $arg;
}
}
if (drupal_is_front_page()) {
$suggestions[] = 'page-front';
}
//Teil zum auswählen eines Templates für spezielles Vokabular
if (arg(0) == 'taxonomy' && arg(1) = 'term' && $id = arg(2)){
$term = taxonomy_get_term($tid)
$suggestions[] = 'taxonomy-vocabulary-'.$term->vid;
}
return _phptemplate_callback('page', $variables, $suggestions);
}
?>
Das letzte IF wurde von mir hinzugefügt um der callback noch einen Vorschlag zu übergeben. Der letzte Vorschlag wird anscheinend zuerst bearbeitet, daher dürfte man dann für vokabularspezifische Abfragen auf 'taxonomy/term/...' mit dem taxonomy-vocabulary-*vid*.tpl.php arbeiten können.
Hoffe das klappt.
Bin gerade auch noch auf
am 31.01.2008 - 14:40 Uhr
Bin gerade auch noch auf eine vermutlich einfachere Anpassung der template.php gestoßen, indem man den template-variablen einen Wert für template_files oder template_file übergibt (siehe: _phptemplate_callback). Dies geschieht über die _phptemplate_variables (Diesmal wirklich _phptemplate_variables, nicht _itheme_variables):
<?php
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
//Teil zum auswählen eines Templates für spezielles Vokabular
if (arg(0) == 'taxonomy' && arg(1) = 'term' && $id = arg(2)){
$term = taxonomy_get_term($tid);
$vars['template_files'] = array('taxonomy-vocabulary-'.$term->vid);
}
return $vars;
}
return array();
}
?>
So ist es nicht mehr notwendig die komplette phptemplate_page zu überschreiben.
Das ist echt zu viel für
am 31.01.2008 - 15:44 Uhr
Das ist echt zu viel für mich... Mein Kopf brennt...
Wäre nicht schlecht, wenn mir das jemand erklären könnte...
Um das Problem noch mal konkreter zu beschreiben... Vielleicht gibt es ja noch eine einfachere Lösung:
Die taxonomy/term soll für ALLE Vokabulare gelten, außer
Vokabular "Blogs" (ID: 2)
Begriff 1 "Hunde" (ID: 6)
Begriff 2 "Katzen" (ID: 7)
Begriff 3 "Kleintiere" (ID: 8)
Begriff 4 "Pferde" (ID: 9)
Begriff 5 "Fische" (ID: 10)
Begriff 6 "Sonstiges" (ID: 11)
Vielleicht kann man diese über das template der taxonomy/term ausschließen?
Wenn Du nur den
am 31.01.2008 - 16:27 Uhr
<?php
$term = taxonomy_get_term($args[0]);
if ($term->vid == 2)
{
$view->page_type = 'table'; // for vid = 2 we are showing table view
}
else {
$view->page_type = 'teaser';
} // for any other vocabulary we show Teaser view.
return $args;
?>
Da Vollansicht und Teaser die Angaben der Felder ignorieren, kannst Du diese für eine Tabellenansicht zum Beispiel normal einstellen.
Mit dem Views Argument Handling Code lassen sich noch viele andere Sachen, Variablenspezifisch einstellen.
An PHP-Code wirst Du nicht vorbeikommen.
An diese Nodes könnte in der Ansicht auch ein view angehängt werden.
> Frage: Wie kann diese
am 12.03.2008 - 12:42 Uhr
> Frage: Wie kann diese Ansicht nur für BESTIMMTE Vokabulare / Begriffe beschränken??????
Kannst du nicht einfach einen Filter auf "Taxonomy: Vocabulary Name" hinzufügen?
Content template
am 12.03.2008 - 13:40 Uhr
Ich habe ein ähnliches Problem dem Modul content template gelöst. Da kannst du die Ausgabe einzelner Inhaltstypen anpassen.
Wie hast du das Problem denn
am 18.05.2009 - 05:04 Uhr
Wie hast du das Problem denn jetzt letzendlich gelöst?