Вы не зашли.
Подскажите как вывести отфильтрованые новости прямо в текущей категории. т.е. в шаблоне news.table.tpl, используя плагин xfilter. Вот код плагина:
<?php
if (!defined('NGCMS')) die ('HAL');
include root.'includes/news.php';
add_act('index', 'xfilter');
function xfilter() {
global $twig, $template, $mysql, $tpl, $lang;
$filter = array();
$tVars = array();
include root.'conf/extras/xfields/config.php';
foreach ($xarray['news'] as $id => $data) {
switch ($data['type']) {
case 'text' : $val = '<input type="text" name="xfields_'.$id.'" title="'.$data['title'].'" value="'.secure_html($data[$id]).'" />';
break;
case 'select': $val = '<select name="xfields_'.$id.'" >';
if (!$data['required']) $val .= '<option value=""> Не важно</option>';
if (is_array($data['options']))
foreach ($data['options'] as $k => $v) {
$val .= '<option value="'.secure_html(($data['storekeys'])?$k:$v).'"'.((($data['storekeys'] && ($xdata[$id] == $k))||(!$data['storekeys'] && ($xdata[$id] == $v) || ($_REQUEST["xfields_$id"] == $v)))?' selected':'').'>'.$v.'</option>';
}
$val .= '</select>';
break;
case 'textarea' : $val = '';
break;
case 'images' : $val = '';
break;
}
$tVars["xfields_$id"] = $val;
$xpaginparams["xfields_$id"] = $_REQUEST["xfields_$id"];
$tpath = locatePluginTemplates(array('xfilter','xfilter_form'), 'xfilter', 1);
$xf = $twig->loadTemplate($tpath['xfilter_form'].'xfilter_form.tpl');
$template['vars']['xfilter'] = $xf->render($tVars);
if ($_REQUEST["xfields_$id"]) {
array_push($filter, array('DATA',"xfields_$id", '=', secure_html($_REQUEST["xfields_$id"])));
}
}
$paginationParams = array('pluginName' => 'news', 'pluginHandler' => 'main', 'xparams' => $xpaginparams, 'paginator' => array('page', 1, false));
$callingParams = array('style' => 'short', 'customCategoryTemplate' => true);
if ($_REQUEST['page']) {
$callingParams['page'] = intval($_REQUEST['page']);
}
if ($filter) {
array_unshift($filter, 'AND');
$filtered = news_showlist($filter, $paginationParams, $callingParams);
if ($filtered) {
$template['vars']['mainblock'] = $filtered;
}
else {
$template['vars']['mainblock'] = '';
msg(array("type" => "info", "info" => $lang['msgi_no_news']));
}
}
}
В данный момент он выводит в main.tpl через переменную {mainblock}. Самостоятельно подправить пробовал, не получается... знаний не хватает.
Изменено SFproG (2012-12-05 16:35:20)
Не в сети
Ни кто не подскажет? как-то сюда надо вывести шаблон категории "$template['vars']['mainblock'] =" вместе с переменной $filtered. Исковырял news.php, ни чего правильно подходящего не нашел пока.
Не в сети
SFproG, есть фильтры onBeforeShow($mode) и onAfterShow($mode) в классе NewsFilter
Вызываются перед отображением полного списка и после.
В них можно изменять (добавлять что-то своё) в глобальной переменной $template['vars']['mainblock'].
Оно?
Не в сети