На время проведения реконструкции сайт переведён в режим "ТОЛЬКО ЧТЕНИЕ" (Read only). Приносим свои извинения!
MaxHub
Полезности по Maxsite CMS

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

Вопросы-ответы / 8 апреля 2016

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

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

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

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

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

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

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

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

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

  3. Желательно подсказку в таком виде - нужный код нужный код 2 нужный код 3, буду очень признателен!

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

    Допустим в переменную $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

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

  6. Спасибо за подсказки! Буду приделывать к сайту, как и что получится отпишусь.

  7. Получилось?

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

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

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

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

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