все перерыл, мозги уже кипят
подскажите как убрать ссылку "Блог пользователя ..." из тизера?
"Читать далее" и "Добавить комментарий" убрал добавив в template.php код:
function node_link_alter(&$links, $node) {
if ($node && $node->type == 'blog') {
unset($links['comment_add'], $links['node_read_more']);
}
}
if ($node && $node->type == 'blog') {
unset($links['comment_add'], $links['node_read_more']);
}
}
как из $links убрать ссылку на блог пользователя, т.к. в моем случае он всего один на сайте ?
Комментарии
А нужно ли для этого пользоваться модулем блог?
Пользуйся story или page...
поддерживаю автора поста! - вопрос остается открытым
2direqtor: хочется чтобы был именно блог, конкретно блог проекта (раньше это называли новостями)
Вот я пока не заметил чем тип данных блог отличается от стори?
Вот тут недавно ведь расписывал вроде и поиск уже сделали !
<?php
// или ваша-тема_preprocess_node(...)
function phptemplate_preprocess_node(&$variables,$hook) {
//drupal_set_message('<pre>'.print_r($variables,1).'</pre>');
unset($variables['node']->links['blog_usernames_blog']);
// пересобираем links
$variables['links']=theme('links',$variables['node']->links);
}
?>
Да если нужно только из тизера , проверете переменную $variables['teaser']==1
спасибо, все работает
сделал так:
if ($node && $node->type == 'blog') {
unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']);
}
}
а этот код у меня никак не работает (Drupal 6.2), может еще что-то нужно добавить?
unset($variables['node']->links['blog_usernames_blog']);
$variables['links']=theme('links',$variables['node']->links);
}
(вставлял тоже в template.php)
Кэшь чистили ?
Можно попробовать вместо phptemplate_preprocess_node - ваша-тема_preprocess_node
Можно попробовать вместо phptemplate_preprocess_node - ваша-тема_preprocess_node
пробовал, не помогает
кстати, пробовал все из вашего поста http://www.drupal.ru/node/16562
ничего у меня не заработало, только названия переменных там подсмотрел, хотелось бы еще только дату поста оставить (без автора), типа
и потом в node.tpl.php делал
никак не получается, ничего не выводит, т.е. пусто
Что то у вас странное а функция хоть вызывается ? скорее всего нет (проверить можно вставив допустим в начало функции
<?phpdrupal_set_message('<pre>'.print_r($variables,1).'</pre>');?>
, кстати я не зря везде оставляю в примерах закомментированной эту функцию, раскомментировав ее вы во первых проверите вызывается ли ваша функция, во вторых получите весь массив переменных которые можно задействовать.Ну а если не вызывается, то надо смотреть почему - может где в названиях функций ошиблись (букву там пропустили) - механизм хуков Друпала к этому критичен. Проверяйте смотрите, отлаживайте , И еще если используете нестандартные хуки темизирования (в Drupal 6.*), то их ко всему прочему еще необходимо регистрировать в хуке ваша-тема_theme
И еще по $date, я где то там в комментах к своему посту писал, что в принципе переприсваевание даты в моем примере излишне , в шаблоне можно просто использовать переменную $date.
да, именно функция и не вызывается почему то, ни phptemplate_preprocess_node, ни mytheme_preprocess_node
а вот node_link_alter вызывается нормально, собственно все что хотел в ней и сделал, но разобраться хочется и с *_preprocess_node
Ну даже не знаю что подсказать ...
Если движок темы у вас основан на phptemplate , то функция phptemplat_preprocess_node - должна вызывыатсья всякий раз при выводе ноды ...
У функции mytheme_preprocess_node есть маленький нюанс, если тема например называется, my-cool
то функция должна называться my_cool_preprocess_node (т.е. дефисы заменяются подчеркиванием)
Ну и еще один момент, у Drupal 6 - очень "агрессивный" кэш, поэтому после всяких манипуляций с оформлением, надо очистить кэш через Управление->Настройка->Производительность "Очистить кэш данных" , и еще на время отладки я бы отключил все кэширования и компрессию
Ну и маленькая "фича", для проверки вообще интерпретируется ли ваш "изменяемый" файл Друпалом, можно намерено допустить в файле семантическую ошибку , и если движок выдаст сообщение о ней , то значит файл интерпретируется.
оказалось node_link_alter не вызывается для незарегистрированных пользователей, так что попытки разобраться продолжаются )
Ну уж такого точно быть не может если б хуки зависили от того, под кем зашел на сайт пользователь, то друпал бы вообще не работал
Другое дело, что для разных ролей хуки могут отдавать разную информацию, но это уже другой вопрос.
выручайте, ну как такое может быть, где копать, что и где я мог сломать?
node_link_alter - вызывается и отрабатывает прекрасно при залогиненом юзере, и
код unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']); нормально работает,
но при анониме - не срабатывает, проверял так (в template.php)
drupal_set_message('<pre>'.print_r($links,1).'</pre>');
}
function phptemplate_preprocess_node(&$variables, $hook) {
drupal_set_message('<pre>'.print_r($variables, 1).'</pre>');
}
function phptemplate_preprocess_comment(&$vars) {
drupal_set_message('<pre>'.print_r($vars, 1).'</pre>');
}
function phptemplate_links($links, $attributes = array('class' => 'links')) {
drupal_set_message('<pre>'.print_r($links, 1).'</pre>');
}
ни одна из функций, phptemplate_preprocess_node, phptemplate_preprocess_comment, phptemplate_links не срабатывает никогда
тему использую на основе greenNblack, менял в ней пока только css http://drupal.org/project/greenNblack
Drupal 6.2
все происходит пока локально, под денвером
Поставил тему проверил, все прекрасно работает !!!
Один момент !!!, проверьте в профиле пользователя (под которым работаете) какая тема установлена у него а какя по умолчанию, может у вас анонимусы работают с изначальной темой !!!! (а лучше удалите все лишние темы (в смысле переместите куда нибудь в недоступное место), и не забывайте чистить кэш !!!
вот функция которую я вставил в предложенную тему (и она прекрасно отработала)
<?php
function phptemplate_preprocess_node(&$variables,$hook) {
drupal_set_message('<pre>'.print_r($variables,1).'</pre>');
/*
* Если это не вывод ноды и материал не помещается полностью в вывод,
* то убираем ссылку на добавление комментария, так как
* не прочитав материал целиком, не логично давать коментировать :)
*/
if($variables['page']==0 && isset($variables['node']->links['node_read_more'])) {
unset($variables['node']->links['comment_add']);
}
/*
* Если это тизер и есть линк на node_read_more
* то формируем свою ссылку hotel_node_read_more
*/
if(isset($variables['node']->links['node_read_more']) && $variables['teaser']==1){
$variables['hotel_node_read_more']=l(
' » '.$variables['node']->links['node_read_more']['title'],
$variables['node']->links['node_read_more']['href'],
array('attributes'=>array(
'title'=>$variables['node']->links['node_read_more']['attributes']['title'],
'class'=>'node-more-read')
)
);
/*
* Убираем лишнии параграф (теги <p> </p> из тизера)
*/
$variables['content']=preg_replace('#\<p\>\s*(.*?)\s*\<\/p\>#si','\\1',$variables['node']->teaser);
}
/*
* Убираем из links ссылку на node_read_more
*/
unset($variables['node']->links['node_read_more']);
/*
* формируем переменную links по новой, с учетом наших изменений
*/
$variables['links']=theme('links',$variables['node']->links);
/*
* Формируем дополнительные переменные hotel_submitted_date и hotel_submitted_user
* которые мы будем использовать в node.tpl.php вместо переменной submitted
*/
$variables['hotel_submitted_date']=$variables['date'];
$variables['hotel_submitted_user']=$variables['name'];
}
?>
все, заработало, после того как слазил проверить темы и переключил другую тему, потом опять свою, видимо так кэш до конца очистился, спасибо за помощь!
заработала phptemplate_preprocess_node и все как должно быть
решил эту проблему с помощью модуля fixideology, выложенного тут:
http://www.drupal.ru/node/4713
все намного проще.
в node.tpl.php прячем их и все ок.
hide($content['links']['blog']);