Как сделать кастомный вывод записей в рубрике?

/ Просмотров: 3351

В общем задача такая - сделать отдельный шаблон, для вывода записей в рубриках отдельным шаблоном, поскольку я не профессионал в php, то для меня это тяжко. Вот картинка:

Как сделать кастомный вывод записей в рубрике?

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

Кто сможет помочь советом как это правильно прописать, поскольку у меня выходит всякая ерунда, где-то я все время косячу и выводится все совершенно не так и не туда, или вообще все печально.

Очень жду совета от знающих smile

Большая просьба не обсуждать криворукость мою и незнания каких то простых вопросов, я только учусь.

С уважением, Николай.

Комментариев: 9 RSS

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

Да, с html вроде все нормально, нужна подсказка как выводить последнюю запись из рубрики в один блок, потом как еще три записи более ранние в другой, и еще три в нижний блок, плюс как правильно брать картинку записей

Вариантов много, я опишу самый прямолинейный.

Допустим в переменную $pages вы уже получили (стандартно для дефолтного шаблона) массив всех записей для вывода на данной странице рубрики. Тогда задача сводится к циклу и условным операторам внутри цикла:

require_once(getinfo('shared_dir') . 'stock/thumb/thumb.php'); # библиотека для формирования миниатюр
foreach( $pages as $k => $page )
{
 if( $k == 0 )
 {
  # здесь код вывода "крупной" записи
 }
 elseif( $k > 0 && $k < 4 )
 {
  # здесь код вывода трёх в столбец
 }
 elseif( $k >= 4 )
 {
  # здесь код вывода трёх в строку
 }
}
mso_hook('pagination', $pagination);

Остаётся только правильно сформировать вывод с помощью оператора echo. Ну и ещё добавить код для формирования превьюшек. Я обычно пользуюсь примерно такой заготовкой:

# адрес картинки записи в мета image_for_page
$img_url = isset($page['page_meta']['image_for_page'][0]) ? $page['page_meta']['image_for_page'][0] : '';
$img_url = $img_url == '' ? mso_get_first_image_url($page['page_content'], true, $img_url) : $img_url; # пытаемся взять первую картинку из текста
$img_width = 300;
$img_height = 150;
$img_type_resize = 'resize_full_crop_center';
# генерируем thumb
if( $thumb = thumb_generate(
  $img_url, # адрес картинки
  $img_width, # ширина
  $img_height, #высота
  '//placehold.it/'.$img_width.'x'.$img_height.'.png', # если нет картинки - показываем заглушку
  $img_type_resize, # способ создания миниатюры
  false,
  'mini', # папка для сохранения
  '-'.$img_width.'-'.$img_height.'-'.$img_type_resize # добавка к имени файла миниатюры
 )
)
{
 $img = $thumb;
}
$page_url = getinfo('siteurl').'page/'.$page['page_slug'];
$page_title = $page['page_title'];
echo '<div><h3>'.$page_title.'</h3><div class="img-wrap"><img src="'.$img.'" title="'.$page_title.'" alt="'.$page_title.'"></div></div>'.NR;

Дальше дело техники собрать это всё в кучу и заставить работать вместе smile Обычно я такое делаю за деньги и чтобы клиенты не обижались, что я кому-то сделал "за так" - остановлюсь на этом smile

Еще можно обойтись без php Псевдокласс :nth-child в css вполне сделает подобный вывод. Так сказать для самых ленивых.

А какой файл нужно править то?

В админке есть только выбор: "Полные или короткие записи для рубрик"

Хочу получить вывод категории в виде миниатюры и анонса записей

А какой файл нужно править то?

Очевидно тот, который отвечает за вывод содержимого рубрик. Например, /type/category/category.php. Но это основной, возможно можно обойтись без правки основного файла, а только type_foreach файл поправить. Но это вам нужно самостоятельно решать - насколько глубоко вам нужно перерабатывать шаблон вывода рубрик. В любом случае, проследите по указанному мной файлу логику вывода и тогда сами найдёте ответ на вопрос о том, какой файл нужно править.