Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Вывод на главной с рекламным блоком

Здесь можно задать вопрос по PHP, не боясь нарваться на злых админов за возможно глупый вопрос. Форум имеет обучающую направленность, поэтому можно создавать обучалки.
Аватар пользователя
fox2smart
Сообщений: 9
Зарегистрирован: 03 май 2013, 15:27

Вывод на главной с рекламным блоком

Сообщение fox2smart » 14 май 2013, 10:19

Здравствуйте!
Я сама с php пока общаюсь на уровне скопировал-вставил :oops: , поэтому хотелось бы получить совет профессионала.

На главной странице при выводе двух колонок после первого ряда я вставила рекламный блок, затем идет еще один ряд в две колонки. Здесь скриншот:

http://s1.ipicture.ru/uploads/20130514/9LlS2rJk.png

Но, если использовать пагинацию и затем перейти на следующую страницу главной по пагинации, то нижние статьи с первой страницы (Черника, Орхидеи) перескакивают вверх:

http://s2.ipicture.ru/uploads/20130514/fxcQtpTb.png

И только потом идут следующие...
Если я правильно понимаю, это происходит из-за того, что в файле 2col-last-pages.php главной страницы у меня прописано два массива, в конце первого -рекламный блок.
То есть так:

Код: Выбрать все

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 */
$exclude_page_id = array(); // исключаем вывод записей из нижних блоков
   $p = new Page_out; // подготавливаем объект для вывода записей




   //Здесь начало первого массива:
   if ($pages = mso_get_pages(array(
            'limit' => 2,
            'cut' => '...',
            'custom_type' => 'home',
            'exclude_page_id' => $exclude_page_id,
            'get_page_categories' => false,
            'get_page_count_comments' => true,
            ), $pagination))
   {

      // формат записи
      $p->format('title', '<h4>', '</h4>');
      $p->format('date', 'd/m/Y H:i');
      $p->format('read', 'Читать полностью >>>', '');
      $p->format('comments', tf('Обсудить'), tf('Читать комментарии'), '',  '');
      
      
      // вывод в виде сетки
      $p->box_grid(2); // 2 ячейки
      
      foreach ($pages as $page)
      {
         $p->load($page); // загружаем данные записи

         $p->box_grid_cell('left'); // начало ячейки
         
         // адрес картинки записи в мета img_page_home
         // генерируем thumb
         if (
            $img = thumb_generate(
            $p->meta_val('image_for_page'), // адрес
            280, //ширина
            100, //высота
            getinfo('template_url') . 'images/placehold/280x100.png'
            ))
         {
            $img = $p->page_url(true) . '<img src="' . $img . '" class="width100 center shadow" alt="" title="' . htmlspecialchars($p->val('page_title')). '"></a>';
            
            $p->html($img);
         }
         
         $p->line('[title]'); // заголовок
         $p->content_chars(207, '...');  // текст обрезанный
         //$p->content_words(27, ' ...');  // текст обрезанный
         
         $p->line('[read]','<p class="read">', '</p>');
         $exclude_page_id[] = $p->val('page_id'); // сохраняем id записей, чтобы их позже исключить из вывода
         $p->box_grid_next(); // конец ячейки
      }
      {
         echo '<div class="rekblock">' . mso_get_option('pup_rekpage', 'templates', '') . '</div>';
      }   

   $p->box_grid_end(); // стоп вывода ячеек





   //Здесь начало второго массива:
   if ( $pages = mso_get_pages(array(
            'limit' => 2,
            'cut' => '...',
            'exclude_page_id' => $exclude_page_id,
            'cat_id' => mso_get_option('home_cats_id_other', 'templates', ''),
            'custom_type' => 'home',
            'get_page_categories' => false,
            'get_page_count_comments' => true,
            ), $pagination))
         
   {
      
      $p->reset_counter(count($pages)); // сбросить счетчик
      
      $p->format('title', '<h4>', '</h4>');
      $p->format('date', 'd/m/Y H:i');
      $p->format('read', 'Читать полностью >>>', '');
      $p->format('comments', tf('Обсудить'), tf('Читать комментарии'), '',  '');

      // вывод в виде сетки
      $p->box_grid(2); // 2 ячейки

      foreach ($pages as $page)
      {
         $p->load($page); // загружаем данные записи

         $p->box_grid_cell('left'); // начало ячейки
         
         // адрес картинки записи в мета img_page_home
         // генерируем thumb
         if (
            $img = thumb_generate(
            $p->meta_val('image_for_page'), // адрес
            280, //ширина
            100, //высота
            getinfo('template_url') . 'images/placehold/280x100.png'
            ))
         {
            $img = $p->page_url(true) . '<img src="' . $img . '" class="width100 center shadow" alt="" title="' . htmlspecialchars($p->val('page_title')). '"></a>';
            
            $p->html($img);
         }
         
         $p->line('[title]'); // заголовок
         $p->content_chars(207, '...');  // текст обрезанный
         //$p->content_words(27, ' ...');  // текст обрезанный
         
         $p->line('[read]','<p class="read">', '</p>');
         
         
         $exclude_page_id[] = $p->val('page_id');
         $p->box_grid_next(); // конец ячейки
      }
   }
   $p->box_grid_end(); // стоп вывода ячеек
   
   mso_hook('pagination', $pagination);   

} // if $k

Поэтому они, по идее, работают правильно и выполняют свои функции. Без пагинации это, в принципе работает нормально.

Вопрос: как мне сделать так, чтобы весь вид главной шел одним массивом и чтобы при этом он имел именно тот вид, который мне нужен?
То есть: две статьи в две колонки,
за ними рекламный блок,
а после этого еще две статьи.

И чтобы на следующих переворотах пагинации статьи шли дальше, а не повторялись?
Если это вообще возможно.

Заранее огромное спасибо за совет! :)

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Вывод на главной с рекламным блоком

Сообщение MAX » 22 май 2013, 10:51

У вас в первом массиве выводятся просто последние записи. Во-втором — записи из определенной рубрики. Пагинация формируется только для второго блока. Так что всё логично.

Вам для начала нужно определиться зачем вам два цикла вывода и нужны ли разные критерии для получения записей. Судя по всему два цикла не нужны.

Аватар пользователя
fox2smart
Сообщений: 9
Зарегистрирован: 03 май 2013, 15:27

Re: Вывод на главной с рекламным блоком

Сообщение fox2smart » 22 май 2013, 16:05

Спасибо большое, Максим, за ваш ответ!
В том-то и состоит моя проблема :) - я как раз не знаю, как реализовать в коде, чтобы это все шло одним циклом (с критерием статей - последние записи), пагинация работала нормально и при всем том сохранялся блок для рекламы посередине, то есть после первого ряда статей...

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Вывод на главной с рекламным блоком

Сообщение MAX » 22 май 2013, 16:24

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

Аватар пользователя
fox2smart
Сообщений: 9
Зарегистрирован: 03 май 2013, 15:27

Re: Вывод на главной с рекламным блоком

Сообщение fox2smart » 22 май 2013, 17:07

Хорошо! :oops:
Тогда так.
У меня на главной идет вывод последних записей в две колонки, это достигается за счет применения файла 2-col-last-pages.php, внизу идет пагинация.

Здесь скриншот: http://s2.ipicture.ru/uploads/20130522/R17SpqZU.png

Здесь код:

Код: Выбрать все

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 */

   $p = new Page_out; // подготавливаем объект для вывода записей
   
   if ($pages = mso_get_pages(array(
            'limit' => 4,
            'cut' => '...',
            'custom_type' => 'home',
            'get_page_categories' => false,
            'get_page_count_comments' => true,
            ), $pagination))
   {

      // формат записи
      $p->format('title', '<h4>', '</h4>');
      $p->format('date', 'd/m/Y H:i');
      $p->format('read', 'Читать полностью >>>', '');
      $p->format('comments', tf('Обсудить'), tf('Читать комментарии'), '',  '');
      
      
      // вывод в виде сетки
      $p->box_grid(2); // 2 ячейки
      
      foreach ($pages as $page)
      {
         $p->load($page); // загружаем данные записи

         $p->box_grid_cell('left'); // начало ячейки
         
         // адрес картинки записи в мета img_page_home
         // генерируем thumb
         if (
            $img = thumb_generate(
            $p->meta_val('image_for_page'), // адрес
            280, //ширина
            100, //высота
            getinfo('template_url') . 'images/placehold/280x100.png'
            ))
         {
            $img = $p->page_url(true) . '<img src="' . $img . '" class="width100 center shadow" alt="" title="' . htmlspecialchars($p->val('page_title')). '"></a>';
            
            $p->html($img);
         }
         
         $p->line('[title]'); // заголовок
         $p->content_chars(207, '...');  // текст обрезанный
         //$p->content_words(27, ' ...');  // текст обрезанный
         
         $p->line('[read]','<p class="read">', '</p>');
         
         $p->box_grid_next(); // конец ячейки
      }
      
   $p->box_grid_end(); // стоп вывода ячеек
   
   mso_hook('pagination', $pagination);
   }


Мой вопрос:
Как мне вставить в этот код произвольный блок после первого ряда статей, чтобы вид страницы был такой: http://s2.ipicture.ru/uploads/20130522/dT67XSDs.png

Чтобы сохранялся один цикл и чтобы при переходах по цифрам пагинации этот блок оставался точно так же между рядами, при этом никак не влияя на порядок статей?

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Вывод на главной с рекламным блоком

Сообщение MAX » 22 май 2013, 19:10

Код: Выбрать все

   $p->box_grid(2); // 2 ячейки
     
   $p->reset_counter(count($pages));  // запускаем счетчик

   foreach ($pages as $page)
   {
      ...
   
      
      $p->box_grid_next(); // конец ячейки
      
      if ($p->num == 2) echo '<div class="reklama">РЕКЛАМА</div>';
   }
   ...

Аватар пользователя
fox2smart
Сообщений: 9
Зарегистрирован: 03 май 2013, 15:27

Re: Вывод на главной с рекламным блоком

Сообщение fox2smart » 23 май 2013, 04:12

Спасибо огромное за подсказку, Максим! :P
Попробую сделать так.


Вернуться в «PHP»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей