все перерыл, мозги уже кипят
подскажите как убрать ссылку "Блог пользователя ..." из тизера?
"Читать далее" и "Добавить комментарий" убрал добавив в 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
спасибо, все работает![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
сделал так:
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 не вызывается для незарегистрированных пользователей, так что попытки разобраться продолжаются )
Ну уж такого точно быть не может
если б хуки зависили от того, под кем зашел на сайт пользователь, то друпал бы вообще не работал ![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Другое дело, что для разных ролей хуки могут отдавать разную информацию, но это уже другой вопрос.
выручайте, ну как такое может быть, где копать, что и где я мог сломать?
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 и все как должно быть![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
решил эту проблему с помощью модуля fixideology, выложенного тут:
http://www.drupal.ru/node/4713
все намного проще.
в node.tpl.php прячем их и все ок.
hide($content['links']['blog']);