Задачата е да направим блок, който да съдържа винаги 6 /или друг брой/ резултата на релевантни по термини нодове, като:
*когато резултата е 6 и повече, да се покажат случайни 6 от тях или
*когато релевантните нодове са по-малко от 6, блока да се допълни до 6 с най-новите от същия тип съдържание.
За релевантни по термини или cck field е описано в http://razni-raboti.com/node/153. За този пример ще използваме същия този блок, като в същото views добавим нов дисплей блок, който да изведе последните 6 от същия тип съдържание.
Тъй като там се описва И за аргументи cck field И за термини като аргументи, ще се съсредоточим на случая, когато се използват термините.
Във views, което направихме в http://razni-raboti.com/node/153 имаме един дисплей блок, който има първи аргумент node nid който изключва текущия нод от резултата, и втори аргумент Taxonomy term id.
Добавяме още един дисплей блок. В неговия аргумент Taxonomy term id кликаме на Override и изтриваме този аргумент - в този дисплей искаме само последните от същия вид, което задаваме във Филтри и Сорт.
Малко отклонение: Override кликваме когато имаме няколко дисплея в едно views и искаме нещата за които кликаме Override, например за аргументи, или за филтри, или за сортиране да се отнасят САМО за този дисплей - в противен случай промените ще се отнасят за всички дисплеи в това views. За аргументи и сортиране искаме в конкретния случай всеки дисплей да има различни настройки, затова в настройването им кликваме на Override.
Така приключи създаването на този дисплей, който трябва да съдържа най-новите от същия тип съдържание. За да покаже само от същия тип съдържание най-новите 6 съответно задаваме филтър Node type, сортиране по дата с Override, понеже предния дисплей ги показваше random и Items per page 6.
Тези два дисплея съдържат всички резултати, които ни интересуват.
Целта от тук нататък е да покажем заедно тези два блока, като на втория /с последните от същия вид/ се задава динамично Item per page в зависимост от резултатите на първия блок /с релевантни по термини/.
Как да направим това?
Правим блок в който показваме тези два дисплея един след друг - първо с релевантните по термини, след него последните от същия тип. В боду полето на блока поставяме следния код, като за Входящ формат на блока избираме PHP:
<?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(arg(1)); $view_name = 'mpt'; $tids = array(); foreach ($node -> taxonomy AS $term) { $tids[] = $term -> tid; } $arg = implode(',', $tids); $args = array(arg(1), $arg); $rel_per_block = '6'; $view = views_get_view($view_name); $view->set_display('block_1'); $view->execute_display('block_1', $args); $rows = count($view->result); print $view->preview('block_1', array($args)); if (($rel_per_block - $rows) > 0 ) { $show_latest = $rel_per_block - $rows; } else { $show_latest = -1; } if ($rows < $rel_per_block) { $view2 = views_get_view($view_name); $view2->set_display('block_2'); $args = array(arg(1)); $view2->display_handler->set_option('items_per_page', $show_latest); $view2->set_items_per_page($show_latest); $view2->execute('block_2', $args); print $view2->preview('block_2', array($args)); } } ?>
Коментари
Публикувай нов коментар