Как убрать ссылку "Блог пользователя ..." из тизера?

Прислано: AlexR

пн, 07/07/2008 - 23:10

Другие статьи по теме:

все перерыл, мозги уже кипят :)
подскажите как убрать ссылку "Блог пользователя ..." из тизера?

"Читать далее" и "Добавить комментарий" убрал добавив в template.php код:

function node_link_alter(&$links, $node) {
  if ($node && $node->type == 'blog') {
   unset($links['comment_add'], $links['node_read_more']);
   }
}

как из $links убрать ссылку на блог пользователя, т.к. в моем случае он всего один на сайте ?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано direqtor в вт, 08/07/2008 - 01:05.

А нужно ли для этого пользоваться модулем блог?
Пользуйся story или page...


Опубликовано shershen в вт, 08/07/2008 - 06:14.

поддерживаю автора поста! - вопрос остается открытым
2direqtor: хочется чтобы был именно блог, конкретно блог проекта (раньше это называли новостями)


Опубликовано direqtor в вт, 08/07/2008 - 06:24.

Вот я пока не заметил чем тип данных блог отличается от стори?


Опубликовано olk в вт, 08/07/2008 - 06:36.

Вот тут недавно ведь расписывал :) вроде и поиск уже сделали !

<?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


Опубликовано AlexR в вт, 08/07/2008 - 13:41.

спасибо, все работает :)

сделал так:

function node_link_alter(&$links, $node) {
  if ($node && $node->type == 'blog') {
   unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']);
   }
}


Опубликовано AlexR в вт, 08/07/2008 - 14:02.

а этот код у меня никак не работает (Drupal 6.2), может еще что-то нужно добавить?

function phptemplate_preprocess_node(&$variables,$hook) {
  unset($variables['node']->links['blog_usernames_blog']);
$variables['links']=theme('links',$variables['node']->links);
}

(вставлял тоже в template.php)


Опубликовано olk в вт, 08/07/2008 - 14:10.

Кэшь чистили ?
Можно попробовать вместо phptemplate_preprocess_node - ваша-тема_preprocess_node


Опубликовано AlexR в вт, 08/07/2008 - 14:45.

Можно попробовать вместо phptemplate_preprocess_node - ваша-тема_preprocess_node

пробовал, не помогает
кстати, пробовал все из вашего поста http://www.drupal.ru/node/16562
ничего у меня не заработало, только названия переменных там подсмотрел, хотелось бы еще только дату поста оставить (без автора), типа

$variables['mytheme_submitted_date']=$variables['date'];

и потом в node.tpl.php делал
<?php if ($submitted) { ?><span class="submitted"><?php print $mytheme_submitted_date; ?></span><?php } ?>

никак не получается, ничего не выводит, т.е. пусто


Опубликовано olk в вт, 08/07/2008 - 15:58.

Что то у вас странное :) а функция хоть вызывается ? скорее всего нет (проверить можно вставив допустим в начало функции <?phpdrupal_set_message('<pre>'.print_r($variables,1).'</pre>');?>, кстати я не зря везде оставляю в примерах закомментированной эту функцию, раскомментировав ее вы во первых проверите вызывается ли ваша функция, во вторых получите весь массив переменных которые можно задействовать.
Ну а если не вызывается, то надо смотреть почему - может где в названиях функций ошиблись (букву там пропустили) - механизм хуков Друпала к этому критичен. Проверяйте смотрите, отлаживайте , И еще если используете нестандартные хуки темизирования (в Drupal 6.*), то их ко всему прочему еще необходимо регистрировать в хуке ваша-тема_theme
И еще по $date, я где то там в комментах к своему посту писал, что в принципе переприсваевание даты в моем примере излишне , в шаблоне можно просто использовать переменную $date.


Опубликовано AlexR в вт, 08/07/2008 - 17:29.

да, именно функция и не вызывается почему то, ни phptemplate_preprocess_node, ни mytheme_preprocess_node
а вот node_link_alter вызывается нормально, собственно все что хотел в ней и сделал, но разобраться хочется и с *_preprocess_node


Опубликовано olk в вт, 08/07/2008 - 18:17.

Ну даже не знаю что подсказать ...
Если движок темы у вас основан на phptemplate , то функция phptemplat_preprocess_node - должна вызывыатсья всякий раз при выводе ноды ...
У функции mytheme_preprocess_node есть маленький нюанс, если тема например называется, my-cool
то функция должна называться my_cool_preprocess_node (т.е. дефисы заменяются подчеркиванием)
Ну и еще один момент, у Drupal 6 - очень "агрессивный" кэш, поэтому после всяких манипуляций с оформлением, надо очистить кэш через Управление->Настройка->Производительность "Очистить кэш данных" , и еще на время отладки я бы отключил все кэширования и компрессию

Ну и маленькая "фича", для проверки вообще интерпретируется ли ваш "изменяемый" файл Друпалом, можно намерено допустить в файле семантическую ошибку , и если движок выдаст сообщение о ней , то значит файл интерпретируется.


Опубликовано AlexR в вт, 08/07/2008 - 18:58.

оказалось node_link_alter не вызывается для незарегистрированных пользователей, так что попытки разобраться продолжаются )


Опубликовано olk в вт, 08/07/2008 - 19:07.

Ну уж такого точно быть не может :) если б хуки зависили от того, под кем зашел на сайт пользователь, то друпал бы вообще не работал :)
Другое дело, что для разных ролей хуки могут отдавать разную информацию, но это уже другой вопрос.


Опубликовано AlexR в вт, 08/07/2008 - 20:45.

выручайте, ну как такое может быть, где копать, что и где я мог сломать?

node_link_alter - вызывается и отрабатывает прекрасно при залогиненом юзере, и
код unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']); нормально работает,
но при анониме - не срабатывает, проверял так (в template.php)

function node_link_alter(&$links, $node) {
  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
все происходит пока локально, под денвером


Опубликовано olk в вт, 08/07/2008 - 20:55.

Поставил тему :) проверил, все прекрасно работает !!!
Один момент !!!, проверьте в профиле пользователя (под которым работаете) какая тема установлена у него а какя по умолчанию, может у вас анонимусы работают с изначальной темой !!!! (а лучше удалите все лишние темы (в смысле переместите куда нибудь в недоступное место), и не забывайте чистить кэш !!!
вот функция которую я вставил в предложенную тему (и она прекрасно отработала)

<?php
function phptemplate_preprocess_node(&$variables,$hook) {
drupal_set_message('<pre>'.print_r($variables,1).'</pre>');
/*
* Если это не вывод ноды и материал не помещается полностью в вывод,
* то убираем ссылку на добавление комментария, так как
* не прочитав материал целиком, не логично давать коментировать :)
*/
if($variables['page']==&& 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'];
}
?>


Опубликовано AlexR в вт, 08/07/2008 - 21:08.

все, заработало, после того как слазил проверить темы и переключил другую тему, потом опять свою, видимо так кэш до конца очистился, спасибо за помощь!

заработала phptemplate_preprocess_node и все как должно быть :)


Опубликовано mrvoo в пт, 18/07/2008 - 08:46.

решил эту проблему с помощью модуля fixideology, выложенного тут:

http://www.drupal.ru/node/4713