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

8 июля 2008 в 3:10
Аватар пользователя AlexR AlexR 0 18

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

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

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

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

Комментарии

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

8 июля 2008 в 10:14
Аватар пользователя olk olk 0

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

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

8 июля 2008 в 10:36

спасибо, все работает Smile

сделал так:

function node_link_alter(&$links, $node) {
  if ($node && $node->type == 'blog') {
   unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']);
   }
}
8 июля 2008 в 17:41

а этот код у меня никак не работает (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)

8 июля 2008 в 18:02

Можно попробовать вместо 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 } ?>

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

8 июля 2008 в 18:45
Аватар пользователя olk olk 0

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

8 июля 2008 в 19:58

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

8 июля 2008 в 21:29
Аватар пользователя olk olk 0

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

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

8 июля 2008 в 22:17

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

8 июля 2008 в 22:58
Аватар пользователя olk olk 0

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

8 июля 2008 в 23:07

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

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
все происходит пока локально, под денвером

9 июля 2008 в 0:45
Аватар пользователя olk olk 0

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

<?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'];
}
?>
9 июля 2008 в 0:55

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

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

9 июля 2008 в 1:08