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

Как организовать вывод случайных записей на главной в MaxSite?

Вопросы-ответы / 1 августа 2016

Вывод случайных записей на главной в MaxSite

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

Бьюсь уже второй день. Так как в PHP я разбираюсь на уровне скопировал вставил smile

Уже и с page-other-pages и с плагина случайных записей пробовал выдрать. Но знаний не хватает.

Может у кого есть код для вставки случайных записей, что бы он работал на главной странице? Желательно, что бы так же можно было вставить и миниатюры.

Помогите пожалуйста.

Комментариев: 5
  1. Можно сделать. Как вариант вызывать виджет. Ибо виджеты можно выводить не только в боковом меню, а там допилка под потребности и подцепить js и css. Это я вижу как-то так. У кого еще какие варианты?

  2. Сергей, у меня получился такой код:

    $limit = 3;
     $thumb_width = 300;
     $thumb_height = 200;
      
     $CI = & get_instance();
     
     $CI->db->select('mp.page_id, mp.page_title, mp.page_slug, mp.page_content, mm.meta_value img');
     $CI->db->from('mso_page mp');
     $CI->db->join('meta mm', 'mm.meta_id_obj = mp.page_id', 'left'); 
     $CI->db->join('page_type', 'page_type.page_type_id = mp.page_type_id');
     $CI->db->where('mp.page_date_publish < ', 'NOW()', false);
     $CI->db->where('mp.page_status', 'publish');
     $CI->db->where('page_type.page_type_name', 'blog');
     $CI->db->where('mm.meta_key', 'image_for_page');
     $CI->db->order_by('mp.page_id', 'random');
     $CI->db->limit($limit);
     
     $query = $CI->db->get(); #pr($CI->db->last_query());
     if( is_object($query) && $query->num_rows() > 0 )
     { 
      $pages = $query->result_array();
      
      foreach ($pages as $page) 
      {
       #pr($page);
       $img = '';
       # адрес картинки записи в мета image_for_page
       $img_url = isset($page['img']) ? $page['img'] : '';
       $img_url = $img_url == '' ? mso_get_first_image_url($page['page_content'], true, $img_url) : $img_url; # пытаемся взять первую картинку из текста
       $img_url = $_SERVER['SERVER_ADDR'] == '127.0.0.1' ? ( parse_url($img_url, PHP_URL_SCHEME) != '' ? getinfo('site_url').substr(parse_url($img_url, PHP_URL_PATH), 1) : $img_url ) : $img_url; # для работы на локальном сервере
       $img_url = getinfo('site_url').substr(parse_url($img_url, PHP_URL_PATH), 1);
       
       # генерируем thumb
       if(
        $img = thumb_generate(
         $img_url, # адрес
         $thumb_width, # ширина
         $thumb_height, #высота
         '//placehold.it/'.$thumb_width.'x'.$thumb_height.'.png', # если нет картинки - показываем заглушку
         'resize'
        )
       )
       {
        $img = '<img src="'. $img.'" alt="'.htmlspecialchars($page['page_title']).'" title="'.htmlspecialchars($page['page_title']).'" />';
       }
       $page_url = getinfo('siteurl').'page/'.$page['page_slug'];
       ?>
        <div class="page">
         <h2><?= $page['page_title']; ?></h2>
         <a href="<?= $page_url; ?>" title="<?= $page['page_title']; ?>"><?= $img; ?></a>
        </div>
       <?
       
      }
     }

    Код можно использовать в нужном тебе месте. По названиям переменных должно быть понятно что и где задавать, чтобы поменять настройки. Выдаваемую вёрстку само собой нужно подправить под твою задачу. Надеюсь, что вопросов не возникнет ;) У меня всё заработало.

    ЗЫ: Нужно только учитывать, что в выборку попадут записи, у которых заполнено мета-поле с адресом картинки.

  3. Огромнейшее спасибо! Выручил, так выручил! smile

    И без всяких виджетов. Останется только свои опции прикрутить.

    Низкий поклон!

  4. Добавлю один важный момент - если вы ставили сайт и указывали свой префикс для базы данных вместо стандартного MSO, не забудьте заменить его в записи:

    $CI->db->from('mso_page mp');
  5. подскажите, пожалуйста, нубу, что конкретно надо заменить в этом коде, а также куда его надо скопировать или вставить. нужен ли для этого плагин run-php??