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

Главные вкладки

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

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

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

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

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

Комментарии

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

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

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

Вот тут недавно ведь расписывал 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

Аватар пользователя AlexR AlexR 8 июля 2008 в 17:41

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

сделал так:

function node_link_alter(&$links, $node) {
  if ($node && $node->type == 'blog') {
   unset($links['comment_add'], $links['node_read_more'], $links['blog_usernames_blog']);
   }
}
Аватар пользователя AlexR AlexR 8 июля 2008 в 18: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)

Аватар пользователя AlexR AlexR 8 июля 2008 в 18: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 olk 8 июля 2008 в 19:58

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

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

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

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

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

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

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

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

Аватар пользователя olk olk 8 июля 2008 в 23:07

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

Аватар пользователя AlexR AlexR 9 июля 2008 в 0: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 olk 9 июля 2008 в 0:55

Поставил тему 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'];
}
?>
Аватар пользователя AlexR AlexR 9 июля 2008 в 1:08

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

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