Как отредактировать блок «Последние материалы»?

Аватар пользователя Godwin Godwin 24 мая 2012 в 22:48

Возможно, вопрос кому-то покажется простым, но и с Firebug-ом не знаю, как решить. На главной странице есть блок «Последние материалы», где я бы хотел убрать имя автора публикаций, и заменить каким-нибудь разделителем. Кроме того, сайт у меня двуязычный.
Подскажите, где редактируется этот блок, и как вставить разделитель? Спасибо заранее.

Комментарии

Аватар пользователя Plyto Plyto 25 мая 2012 в 16:14

У меня была проблема на подобие вашей,решил ее вот так
Создал свой блок вставив туда:


<?php
$nodes 
db_select('node''n')
  ->
fields('n', array('nid''title'))
  ->
condition('n.status'NODE_PUBLISHED)
  ->
orderBy('n.created''DESC')
  ->
range(05)
  ->
execute();
$titles node_title_list($nodes);
echo 
drupal_render($titles);
?>
Аватар пользователя Osim Osim 26 июля 2012 в 3:27

Plyto wrote:
У меня была проблема на подобие вашей,решил ее вот так
Создал свой блок вставив туда:


<?php
$nodes 
db_select('node''n')
  ->
fields('n', array('nid''title'))
  ->
condition('n.status'NODE_PUBLISHED)
  ->
orderBy('n.created''DESC')
  ->
range(05)
  ->
execute();
$titles node_title_list($nodes);
echo 
drupal_render($titles);
?>

Здравствуйте, я только начал работу с друпалом, и не знаю php, подскажите пожалуйста как нужно изменить этот код что бы выводило таксономию? А то сейчас выводит тип материала Страница(page) и Статья (article), а таксономию не выводит. Поясню: «нужно что бы было наоборот, выводило только таксономию»

Аватар пользователя drupby drupby 25 мая 2012 в 17:38

"Plyto" wrote:

У меня была проблема на подобие вашей,решил ее вот так
Создал свой блок вставив туда:

<?php
$nodes = db_select('node''n')
  ->fields('n'array('nid''title'))
  ->condition('n.status', NODE_PUBLISHED)
  ->orderBy('n.created''DESC')
  ->range(05)
  ->execute();
$titles = node_title_list($nodes);
echo drupal_render($titles);
?>


"Godwin" wrote:
я бы хотел убрать имя автора публикаций, и заменить каким-нибудь разделителем.

и в рендерном массиве добавить префиксами к примеру тег <hr>
если конечно современным божественным истинам эта Миссия всепонятна и всевозможна .

Аватар пользователя ser_house ser_house 25 мая 2012 в 18:01

Нахрена такой велосипедный геморрой? Всё уже сделано самим Друпал, чуток вывод подправить-то...

Весь код по приведенной выше ссылке

function theme_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 .= '</div><div class="node-author">';
  $output .= theme('username', array('account' => user_load($node->uid)));
  $output .= '</div>';

  return $output;
}

В своём template.php добавляем

function THEME_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 .= '</div><div class="node-author">';
  $output .= theme('username', array('account' => user_load($node->uid)));
  $output .= '</div>';
  */

  //Добавляем
  $output .= любой разделитель, какой душе угодно

  return $output;
}

THEME заменяем на название своей темы. Всё.

Аватар пользователя Godwin Godwin 25 мая 2012 в 20:03

Большое спасибо за поддержку.
В директории моей темы я нашёл файл 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, я бы использовал это решение.

Аватар пользователя ser_house ser_house 25 мая 2012 в 21:03

Дополнительно: theme_node_recent_block

Чтобы не выводились ссылки на редактирование, удаление (лично мне они в блоке не нужны, но несложно представить их полезность) и всеведущая more_link делаем в template аналогичную реализацию, но для блока:

function THEME_node_recent_block($variables) {
  $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;
}

Аватар пользователя Godwin Godwin 6 июня 2012 в 12:14

Позвольте добавить похожий вопрос. На главной странице справа есть блок "Небесные новости", который я вывожу через Views. Где мне найти этот блок, чтобы вставить там разделитель между заголовками, как сделано в блоке "Последние материалы", что ниже?

Аватар пользователя ser_house ser_house 6 июня 2012 в 13:14

В файле стилей, естественно.

Кроме того, чтобы блоки выглядели одинаково, в "Последние материалы" тож стиль добавить, а из кода убрать добавленный разделитель.

Аватар пользователя Godwin Godwin 6 июня 2012 в 23:12

Где-то пару недель назад я бился над этим вопросом, оформить через CSS, но и с Firebug-ом не смог разобраться, поэтому начал эту тему. Если подскажете, где править и что править, то было бы здорово.

Аватар пользователя ser_house ser_house 6 июня 2012 в 23:26

Дык, Drupal же) Оборачивает всё что угодно во всё что угодно. Смотрите Firebug-ом какие классы добавляются к пунктам и изменяйте их в стилях.

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

Аватар пользователя Orion76 Orion76 6 июня 2012 в 23:51

Поскольку в D7 элементы-объекты рендерятся в html-код обычно уже в шаблонах, то нично не мешает подправить данные перед подготовкой переменных для этих шаблонов...
Обычно это делается в хуках ИМЯ_ТЕМЫ_preprocess_block(для блоков) в файле template.php в папке темы..

Аватар пользователя Godwin Godwin 6 сентября 2014 в 17:17

Firebug-ом и через Google Chrome я выделяю элементы блока, но не могу вычислить, в каком CSS файле всё это находится. Знаю, там есть основной со стилями, но в нем не могу найти по названию блока. Значит в каком то другом файле.
Зачем править? В блоке новостей заголовки сливаются друг с другом. Я бы убрал там подчеркивания, добавил бы рисунок перед заголовком (типа ">"), и отделил заголовки небольшим пространством друг от друга (или вставить разделитель).

Аватар пользователя ser_house ser_house 7 июня 2012 в 12:27

"Godwin" wrote:

Про править это я у orion76 спрашивал.

Всё что Вы описываете, делается стилями, причем классы уже есть, просто они не такие благозвучные, как нам иногда хотелось бы )

Править код нужно в случае необходимости добавить/удалить данные (как в случае с автором для блока «Последние материалы»), а представление этих данные оформляется стилями. Вроде ИМХО )

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

Аватар пользователя Dimus Dimus 13 ноября 2013 в 11:23

Подскажите плиз,
создал новый тип материала, можно как то сделать чтобы он не выводился в блоке "последние материалы", а выводились только "Article" и "Basic page"?

или как создать такой материал, что бы он не попадал в этот блок, как материал "запись в блоге" например.

или как изменить запрос чтобы выводились только "Article" и "Basic page"?

$nodes = db_select('node', 'n')
Аватар пользователя sergeybelya sergeybelya 13 ноября 2013 в 11:34

Dimus wrote:
Подскажите плиз,
создал новый тип материала, можно как то сделать чтобы он не выводился в блоке "последние материалы", а выводились только "Article" и "Basic page"?

или как создать такой материал, что бы он не попадал в этот блок, как материал "запись в блоге" например.

или как изменить запрос чтобы выводились только "Article" и "Basic page"?

$nodes = db_select('node', 'n')

Views

Аватар пользователя Dimus Dimus 13 ноября 2013 в 13:35

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

Аватар пользователя Waraha Waraha 2 июля 2014 в 0:02

"ser_house" wrote:
THEME заменяем на название своей темы. Всё.

Большое спасибо! Все работает.