пишу модуль..
в хуке определял путь страницы, ее тайтл и функцию, генерющую содержание..
Почему я так делаю? - потому что что мне важны тайтлы у этих страниц..
все было хорошо покуда я в базу не залил 34000 записей..
друпал крякнул и пожаловался на нехватку памяти..
выделил ему память.. он пожаловался что мало времени..
дал много времени - отклика никакого..
думаю все равно это не выход, тк так долго ждать при каждом обращении к модулям - не дело..
какие можете предложить способы решения?
адреса выглядят как ноды 'page/32452'
можно в вызываемой функции переопределять тайтл страницы?
Комментарии
>какие можете предложить способы решения?
не могу помоч, так как не вижу кода
>можно в вызываемой функции переопределять тайтл страницы?
можно, но имхо не правельно, если путь типа node/12, тебе прийдется переоприделить рендеринг вывода ноды. рас так хочется переоприделять титл, так делай это перед сохранением/созданием ноды.
А пробовали оповещение ALL ставить:
ini_set('display_errors',1);
error_reporting(E_ALL);
Может ошибка какая происходит и он валится.
та пусть код покажет, тогда и будим гадать, дело в том что мне к примеру не понятно что он там переоприделят и какими хуками
ниачем, нужен код Вашего "хука"
$result = db_query(db_rewrite_sql($sql));
while($data=db_fetch_object($result)){
$items['firm/'.$data->id] = array(
'title' => $data->title,
//'description' => 'Sorting by alphabet.',
'page callback' => 'firms',
'page arguments' => array($data->id),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
//'type' => MENU_NORMAL_ITEM,
);
}
Так даже в 5-ке не делали... Вы посмотрите как сделано в стандартных модулях, в том же node.module. Должен быть не цикл, а один элемент в массиве: $items['firm/%node'] = ...
См. также http://drupal.org/node/102338
drupal_set_title($data->title);
Нашел в ноде:
drupal_set_title(check_plain($node->title));
return node_show($node, $cid);
}
можно, но имхо не правельно, если путь типа node/12, тебе прийдется переоприделить рендеринг вывода ноды. рас так хочется переоприделять титл, так делай это перед сохранением/созданием ноды.
Хочу удостовериться в верности решения..
Хук генерит пути и содержания страниц и добавляет их в кэш..
после изменения кода хук в модуле приходится выключать/включать модуль что бы он заново сгенерил в кэш меню..
точно тайтл нода определяется перед созданием ноды?
Только ради титула делать хук menu вообще смысла нет, лучше юзать хук nodeapi при $op=='view' && $page или вообще можно в теме нужный титул подписывать.
Но даже если делать хук menu, то не надо никакого цикла, один пункт меню firm/%node для всех нод (выше уже написал).
я думал в строке брать переменную и по ней определять содержимое, теперь уже с тайтлом..
$output='<br>';
$sql="SELECT * FROM firms WHERE firms.id=$n";
$result = db_query(db_rewrite_sql($sql));
while($data=db_fetch_object($result)){
drupal_set_title($data->title);
$output.= ($data->title).'<br>';
}
не могу понять
'title callback' => 'node_page_title',
'title arguments' => array(1),
'page callback' => 'node_page_view',
'page arguments' => array(1),
'access callback' => 'node_access',
'access arguments' => array('view', 1),
'type' => MENU_CALLBACK);
%node - откуда берется? что это такое?
$items['node/%node']
неявно вызывает node_load(arg(1))
'page callback' => 'node_page_view',
'page arguments' => array(1),
затем вызывается node_page_view($node), где $node загружен ранее с помощью node_load
В Вашем случае это может быть так:
$items['firm/%node'] = array(
'title' => 'Firm',
'page callback' => '_firm_page',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK
);
function _firm_page($node) {
...drupal_set_title...print...
}
См. также http://drupal.org/node/102338
тк я понял что все равно все сводится к добавлению в кэш,
ничего не будет если туда добавить 32000 определений итемсов?
друпал справится?
ниасилил причем тут кэш, у Вас тормозит из-за того, что 32 тыс. пунктов меню сделано вместо одного