Возможно, вопрос кому-то покажется простым, но и с Firebug-ом не знаю, как решить. На главной странице есть блок «Последние материалы», где я бы хотел убрать имя автора публикаций, и заменить каким-нибудь разделителем. Кроме того, сайт у меня двуязычный.
Подскажите, где редактируется этот блок, и как вставить разделитель? Спасибо заранее.
Комментарии
theme_node_recent_content
У меня была проблема на подобие вашей,решил ее вот так
Создал свой блок вставив туда:
<?php
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.status', NODE_PUBLISHED)
->orderBy('n.created', 'DESC')
->range(0, 5)
->execute();
$titles = node_title_list($nodes);
echo drupal_render($titles);
?>
Здравствуйте, я только начал работу с друпалом, и не знаю php, подскажите пожалуйста как нужно изменить этот код что бы выводило таксономию? А то сейчас выводит тип материала Страница(page) и Статья (article), а таксономию не выводит. Поясню: «нужно что бы было наоборот, выводило только таксономию»
Если так, то уж лучше Views использовать.
Возможно,я с views не особой знаком
и в рендерном массиве добавить префиксами к примеру тег
<hr>
если конечно современным божественным истинам эта Миссия всепонятна и всевозможна .
Нахрена такой велосипедный геморрой? Всё уже сделано самим Друпал, чуток вывод подправить-то...
Весь код по приведенной выше ссылке
$node = $variables['node'];
$output = '<div class="node-title">';
$output .= l($node->title, 'node/' . $node->nid);
$output .= theme('mark', array('type' => node_mark($node->nid, $node->changed)));
$output .= '</div><div class="node-author">';
$output .= theme('username', array('account' => user_load($node->uid)));
$output .= '</div>';
return $output;
}
В своём template.php добавляем
$node = $variables['node'];
$output = '<div class="node-title">';
$output .= l($node->title, 'node/' . $node->nid);
$output .= theme('mark', array('type' => node_mark($node->nid, $node->changed)));
//Убираем
/*
$output .= '</div><div class="node-author">';
$output .= theme('username', array('account' => user_load($node->uid)));
$output .= '</div>';
*/
//Добавляем
$output .= любой разделитель, какой душе угодно
return $output;
}
THEME заменяем на название своей темы. Всё.
Большое спасибо за поддержку.
В директории моей темы я нашёл файл template.php, и в конце добавил:
<?phpfunction tmru3_node_recent_content($variables) {
$node = $variables['node'];
$output = '<div class="node-title">';
$output .= l($node->title, 'node/' . $node->nid);
$output .= theme('mark', array('type' => node_mark($node->nid, $node->changed)));
$output .= - - - - -
return $output;
}?>
В результате, этот PHP код высветился вверху страницы, и при выводе ничего не изменилось в блоке. Похоже я тут где-то ошибся. (?)
* * *
Тогда я пошел по другому варианту, это по первой ссылке, и в файле: modules/node/node.module, line 2294
удалил 2 строки:
<?php$output .= '</div><div class="node-author">';
$output .= theme('username', array('account' => user_load($node->uid)));?>
...то в этом случае, имя автора перестало выводится. Осталось только разделитель вставить. Подскажите, как? Я вставил output .= - - - - -, в итоге вывелся нуль как разделитель. Хотелось бы что нибудь попроще :), например, кусочек линии.
Итого, понятно, что лучше редактировать template.php, я бы использовал это решение.
$output .= '- - - - -';
или
$output .= '<hr>';
учите php
Разделитель в кавычки заключите.
UPD не успел )
Дополнительно: theme_node_recent_block
Чтобы не выводились ссылки на редактирование, удаление (лично мне они в блоке не нужны, но несложно представить их полезность) и всеведущая more_link делаем в template аналогичную реализацию, но для блока:
$rows = array();
$output = '';
$l_options = array('query' => drupal_get_destination());
foreach ($variables['nodes'] as $node) {
$row = array();
$row[] = array(
'data' => theme('node_recent_content', array('node' => $node)),
'class' => 'title-author',
);
//Удаляем ссылки для каждой ноды
/*
$row[] = array(
'data' => node_access('update', $node) ? l(t('edit'), 'node/' . $node->nid . '/edit', $l_options) : '',
'class' => 'edit',
);
$row[] = array(
'data' => node_access('delete', $node) ? l(t('delete'), 'node/' . $node->nid . '/delete', $l_options) : '',
'class' => 'delete',
);
*/
$rows[] = $row;
}
if ($rows) {
$output = theme('table', array('rows' => $rows));
//ПрОклятая ссылка more_link
/*
if (user_access('access content overview')) {
$output .= theme('more_link', array('url' => 'admin/content', 'title' => t('Show more content')));
}
*/
}
return $output;
}
Всем большое спасибо, блок подправил.
Позвольте добавить похожий вопрос. На главной странице справа есть блок "Небесные новости", который я вывожу через Views. Где мне найти этот блок, чтобы вставить там разделитель между заголовками, как сделано в блоке "Последние материалы", что ниже?
А не лучше стилями обойтись? Каким-нибудь border-bottom?
Думаю, что лучше. Где мне это исправить?
В файле стилей, естественно.
Кроме того, чтобы блоки выглядели одинаково, в "Последние материалы" тож стиль добавить, а из кода убрать добавленный разделитель.
Где-то пару недель назад я бился над этим вопросом, оформить через CSS, но и с Firebug-ом не смог разобраться, поэтому начал эту тему. Если подскажете, где править и что править, то было бы здорово.
Дык, Drupal же) Оборачивает всё что угодно во всё что угодно. Смотрите Firebug-ом какие классы добавляются к пунктам и изменяйте их в стилях.
Кроме того, мне показалось, что главной задачей темы было убрать авторов, тут без кода никак, а стили-то...
Поскольку в D7 элементы-объекты рендерятся в html-код обычно уже в шаблонах, то нично не мешает подправить данные перед подготовкой переменных для этих шаблонов...
Обычно это делается в хуках ИМЯ_ТЕМЫ_preprocess_block(для блоков) в файле template.php в папке темы..
А зачем их править в данном случае?
Firebug-ом и через Google Chrome я выделяю элементы блока, но не могу вычислить, в каком CSS файле всё это находится. Знаю, там есть основной со стилями, но в нем не могу найти по названию блока. Значит в каком то другом файле.
Зачем править? В блоке новостей заголовки сливаются друг с другом. Я бы убрал там подчеркивания, добавил бы рисунок перед заголовком (типа ">"), и отделил заголовки небольшим пространством друг от друга (или вставить разделитель).
Про править это я у orion76 спрашивал.
Всё что Вы описываете, делается стилями, причем классы уже есть, просто они не такие благозвучные, как нам иногда хотелось бы )
Править код нужно в случае необходимости добавить/удалить данные (как в случае с автором для блока «Последние материалы»), а представление этих данные оформляется стилями. Вроде ИМХО )
Views по умолчанию использует свои стили. Для их перекрытия чаще всего достаточно добавить такой же класс в основной файл стилей и определить его по своему желанию.
Подскажите плиз,
создал новый тип материала, можно как то сделать чтобы он не выводился в блоке "последние материалы", а выводились только "Article" и "Basic page"?
или как создать такой материал, что бы он не попадал в этот блок, как материал "запись в блоге" например.
или как изменить запрос чтобы выводились только "Article" и "Basic page"?
Views
Views понятно, но как то для маленького блочка монстрообразно выглядит... или нормально?
Если вам на сайте Views больше нигде не нужен, то тогда db_select
http://xandeadx.ru/blog/drupal/88
Большое спасибо! Все работает.