views, block, menu altal vezerelve

eaposztrof képe

udv..
megoldhatoe az hogy:

- letrehozok egy "asd" view-t,
- amelyet "asd" block-kent definialok,
- filters: Story

es ha az oldal "/qwe", csak a "qwe" taxonomy cimkevel ellatott Story-k jelenjenek meg az "asd" Block-ban

amikor nekiszaladtam,a views argumentumokra gondoltam, hogy azzal meg fogom tudni oldani, de nem tudom hogyan..

a lenyeg:
a Story content type-hoz felveszek egy Taxonomy field-et, amely a menuvel azonos term-eket tartalmazza. amikor letrehozok egy Story-t, hozzarendelek egy term-et, es az ezzel azonos menupont alatt akarom megjeleniteni block-kent.

aboros képe

nek tűnik. korábban valamilyen témában már szóbakerült ez egyszer, most hirtelen nem találom. nagyon hasonlót tudok szerintem mutatni, bár ez használ views -t is és amúgy is lehetséges, hogy nem valami elegáns, majd megmondja aki jobban tudja, hogy rossz, ha az. :)

szóval én úgy okoskodtam, hogy csináltam egy nézetet, ami különböző argumentumok alapján egy listát ad vissza. (nekem két argumentum is van, de ez ne zavarjon) ezután, csináltam egy blokkot, ami php kód és ezt a nézetet hívogatja a megfelelő argumentumokkal. remélem érthető.

mutatom, nézzük élőben például ezt:
http://www.bor-neked.hu/bor/pazmandi-juhfark
jobb oldalon van egy "bor menü" .. annak a blokknak a kódja pedig ez:

<?php
$nid = arg(1);
 
//pince lehivasa
$vid = 11;
$pinceterms = taxonomy_node_get_terms_by_vocabulary($nid, $vid);
foreach ($pinceterms as $pince){
  $pinceid=$pince->tid;
}
 
//borvidek lehivasa
$vid = 10;
$borvidekterms = taxonomy_node_get_terms_by_vocabulary($nid, $vid);
foreach ($borvidekterms as $borvidek){
  $borvidekid=$borvidek->tid;
}
 
//kimenet
global $current_view;
$view1 = views_get_view('proba');
 
//borvidék
$current_view->args[0] = $borvidekid;
$current_view->args[1] = 'borvidek';
print "<strong>Borvidék:</strong><br />";
print (views_build_view('block', $view1, $current_view->args, false, false));
 
//picészet
$current_view->args[0] = $pinceid;
$current_view->args[1] = 'pinceszet';
print "<strong>Pincészet:</strong><br />";
print (views_build_view('block', $view1, $current_view->args, false, false));
 
//pincészet borai
$current_view->args[0] = $pinceid;
$current_view->args[1] = 'bor';
print "<strong>A pincészet borai:</strong><br />";
print (views_build_view('block', $view1, $current_view->args, false, false));

ha jól értem pont ilyesmire gondoltál, csak neked elég egy tartalomtípust listázni, szóval elég lesz egyetlen argumentum is. (fenti példában argumentumként kapja meg a nézet azt is, hogy melyik tartalomtípusra vagyok kíváncsi éppen)

most nézem, hogy ez azért tényleg nem valami elegáns helyenként, jórégen csinálhattam amindenit. ;) de iránymutatásnak jó szerintem, próbáld ki! persze akkor lennél a legnagyobb, ha írnál erre egy picike modulkát, ugyebár. ;)

0
0

-
clear: both;

eaposztrof képe

aboros segitsege alapjan osszeraktm. koszonom.

tehat:
- letrehoztam egy node_story view-et,
- filter-nel beallitottam a Node: Type: Story-t
- argument: Taxonomy: Term ID (use empty text)

- letrehoztam egy uj Block-ot, tartalma:

<?php 
$nid = arg(1);
$vid = 7;
$terms = taxonomy_node_get_terms_by_vocabulary($nid, $vid);
foreach ($terms as $term){
  $term_id=$term->tid;
}
 
global $current_view;
$view = views_get_view('node_story');
$current_view->args[0] = $term_id;
print (views_build_view('block', $view, $current_view->args, true, 100));
?>

Show if the following PHP code returns TRUE (PHP-mode, experts only). ennek kodja:

<?php 
	$nid = arg(1);
	$node=node_load(array('nid' => $nid));
	if($node->type=='page'){
		return true;
	} else {
		return false;
	}
?>

mukodik, de a kovetkezo problemak adottak:
- az aktualis Page-hoz is hozza kell rendeljem a hasznalni kivant term-et, ez pedig ugy nez ki, hogy egyszer mar meghataroztam, hogy menuben hova akrom tenni, es megegyszer ki kell valasszam ugyanazt egy taxonomy listabol is.
- abban az esetben ha nincs talalat az argument alapjan, a kovetkezo hibauzenetet kapom:

* user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN i18n_node i18n ON node.nid = i18n.nid WHERE (i18n.language ='en' OR i' at line 1 query: LEFT JOIN i18n_node i18n ON node.nid = i18n.nid WHERE (i18n.language ='en' OR i18n.language ='' OR i18n.language IS NULL) in C:\wamp\www\includes\database.mysql.inc on line 172.

es van belole tobb is, mutassam? ;)
az i18n modul-t pedig nem kapcsolhatom ki.

#1 edit:
feltunt, hogy a view Page > Empty text-jet irta ki, es nem a Block-et, mikozben a views_build_view-ben a block-ot hivtam meg. kikapcsoltam that a view Page nezetet, de Block Empty text-je nem hajlando megjelenni. nem mintha szukseg lenne jelen esetben ra.. de fura.

#2 edit:
a hibauzenet megoldva, ime a mukodo kod a custom block-hoz:

<?php 
$nid = arg(1);
$vid = 7;
$terms = taxonomy_node_get_terms_by_vocabulary($nid, $vid);
if(!empty($terms)){
	foreach ($terms as $term){
		$term_id=$term->tid;
	}
	global $current_view;
	$view = views_get_view('node_story');
	$current_view->args[0] = $term_id;
	print (views_build_view('embed', $view, $current_view->args, true, 100));
}
?>
0
0

42