для определённого типа материалов нужно выводить не по 10, как по-умолчанию, а по 16 нод на страницу, как можно изменить этот параметр перед выводом и потом вернуть обратно?
в node_page_default() есть запрос к бд:
$result = pager_query(db_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
Если человек хакает ядро, это значит, что он или нашёл баг или не знает Drupal. В первом случае надо отсылать патч на D.org, во втором - учиться, учиться, учиться
Dan, я разве что-то говорил про хакиннг?.. Ты или не внимательно читал мой коммент, или тупишь:)
Что бы решить проблему, нужно сначала найти ее причину. В данном случае это тот запрос к дБ.
А вариантов решений может быть несколько (в том числе и хаккинг).
Интересная логика. Вообще-то я выделил параметр функции, а не сам запрос…
Можно определить свой калбек, создать отдельный блок, hook_ menu_alter или может даже через view…
А вообще было бы неплохо сначала узнать как автор поста выводит и фильтрует ноды.
заменил variable_set('default_nodes_main', 16); на $GLOBALS['conf']['default_nodes_main'] = 16; не пашет! ( неужели без хака ядра никак?
вся фишка в том, что по факту код этот должен отработать ДО pager_query, а в какое место вы этот код решите прописать - дело ваше, можете ядро хакнуть, можете в своем модуле или теме. А оперировать с $GLOBALS['conf'] я предложил как альтернативу variable_set, дабы в БД лишний раз не записывать.
Комментарии
чем выводите?
всмысле? разбираю ноду и вывожу тизерами
в node_page_default() есть запрос к бд:
$result = pager_query(db_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
2romass: ура хакерам!
Если человек хакает ядро, это значит, что он или нашёл баг или не знает Drupal. В первом случае надо отсылать патч на D.org, во втором - учиться, учиться, учиться
Dan, я разве что-то говорил про хакиннг?.. Ты или не внимательно читал мой коммент, или тупишь:)
Что бы решить проблему, нужно сначала найти ее причину. В данном случае это тот запрос к дБ.
А вариантов решений может быть несколько (в том числе и хаккинг).
Ну и что человеку не знающему drupal делать с таким ответом? Конечно менять SQL!
Интересная логика. Вообще-то я выделил параметр функции, а не сам запрос…
Можно определить свой калбек, создать отдельный блок, hook_ menu_alter или может даже через view…
А вообще было бы неплохо сначала узнать как автор поста выводит и фильтрует ноды.
Абсолютно согласен со всем сказанным. Ждём комментарий автора.
<?php
$q = explode('/', $_REQUEST['q']);
switch($q[0])
{
case 'news':
//variable_set('default_nodes_main', 16);
include('page-taxonomy-news.tpl.php');
//variable_set('default_nodes_main', 10);
break;
case 'business':
include('page-taxonomy-business.tpl.php');
break;
default:
include('page.tpl.php');
}
?>
это код page-taxonomy-term.tpl.php, думаю логика ясна )
закоменченные строки - попытка решить проблему без хака ядра(провал)
перед выводом типа материала прописать $GLOBALS['conf']['default_nodes_main'] = 16,
после вывода вернуть взад. Вроде должно сработать...
заменил variable_set('default_nodes_main', 16); на $GLOBALS['conf']['default_nodes_main'] = 16; не пашет! ( неужели без хака ядра никак?
Как вариант:
function hook_init() {
$GLOBALS['conf']['default_nodes_main'] = (arg(0) == 'news') ? 16 : 10;
}
а куда это нужно написать? пробовал в template.php. не работает.
вся фишка в том, что по факту код этот должен отработать ДО pager_query, а в какое место вы этот код решите прописать - дело ваше, можете ядро хакнуть, можете в своем модуле или теме. А оперировать с $GLOBALS['conf'] я предложил как альтернативу variable_set, дабы в БД лишний раз не записывать.
Этот хук запускается только в файлах модуля.
Его нужно поместить в какой-то свой модуль.
function [module_name]_init() {
$GLOBALS['conf']['default_nodes_main'] = (arg(0) == 'news') ? 16 : 10;
}
где [module_name] – название модуля
пришлось хакать taxonomy.module
<?php
$output .= theme('pager', NULL, $default_nodes_main, 0);
function taxonomy_select_nodes($tids = array(), $operator = 'or', $depth = 0, $pager = TRUE, $order = 'n.sticky DESC, n.created DESC') {
if (count($tids) > 0) {
// For each term ID, generate an array of descendant term IDs to the right depth.
$descendant_tids = array();
if ($depth === 'all') {
$depth = NULL;
}
foreach ($tids as $index => $tid) {
$term = taxonomy_get_term($tid);
$tree = taxonomy_get_tree($term->vid, $tid, -1, $depth);
$descendant_tids[] = array_merge(array($tid), array_map('_taxonomy_get_tid_from_term', $tree));
}
if (
$operator == 'or') {$args = call_user_func_array('array_merge', $descendant_tids);
$placeholders = implode(',', array_fill(0, count($args), '%d'));
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $placeholders .') AND n.status = 1 ORDER BY '. $order;
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $placeholders .') AND n.status = 1';
}
else {
$joins = '';
$wheres = '';
$args = array();
foreach ($descendant_tids as $index => $tids) {
$joins .= ' INNER JOIN {term_node} tn'. $index .' ON n.nid = tn'. $index .'.nid';
$placeholders = implode(',', array_fill(0, count($tids), '%d'));
$wheres .= ' AND tn'. $index .'.tid IN ('. $placeholders .')';
$args = array_merge($args, $tids);
}
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n '. $joins .' WHERE n.status = 1 '. $wheres .' ORDER BY '. $order;
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. $joins .' WHERE n.status = 1 '. $wheres;
}
$sql = db_rewrite_sql($sql);
$sql_count = db_rewrite_sql($sql_count);
if ($pager) {
$q = explode('/', $_REQUEST['q']);
switch ($q[0])
{
case 'news':
$default_nodes_main = 16;
break;
default:
$default_nodes_main = variable_get('default_nodes_main', 10);
}
$result = pager_query($sql, $default_nodes_main, 0, $sql_count, $args);
}
else {
$result = db_query_range($sql, $args, 0, variable_get('feed_default_items', 10));
}
}
return
$result;}
function
taxonomy_render_nodes($result) {$output = '';
if (db_num_rows($result) > 0) {
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
}
$q = explode('/', $_REQUEST['q']);
switch ($q[0])
{
case 'news':
$default_nodes_main = 16;
break;
default:
$default_nodes_main = variable_get('default_nodes_main', 10);
}
}
else {
$output .= '<p>'. t('There are currently no posts in this category.') .'</p>';
}
return $output;
}
?>
Против лома нет прийома ..
Чем Вас не устроил вариант romass - написание своего модуля размером в одну строчку?
Теперь, по хорошему, Вам ещё патч надо делать. Потом, после очередного апгрейда его накладывать. Или у Вас по типу "сдал проект и заб[ы|и]л"?
Я думаю, ап модуля таксономии можно ещё пережить. А проект на стадии активной разработки и при особой надобности можно написать и модуль!