Как разделить новости для вставки рекламы

PHP
В прошлой статье уже обсуждали разделение контента на части для вставки каких либо блоков с рекламой или же другими плюшками. Так же в предыдущей статье мы делали несколько SQL запросов, к примеру если нужно было разделить контент на 2 части, нужно было создать два обращение в базу данных, во втором случае проставив обычный отступ записей при выборке. Да, это вариант, но он создает много лишних запросов и конечно же наш мускул при этом страдает, особенно если говорить о высокопосещаемых сайтах, где каждый кусок кода должен быть оптимизирован для снятия излишних нагрузок на сервер.

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

Все очень просто!

Обычно новости на главных страницах или разделах, формируются/перебираются циклом foreach, он как раз таки нам и нужен.

К примеру переменная $data содержит массив объектов вида.

    $data = array(
        [0] => stdClass Object(
                    [id] = 1
                    [text] = Описание
                )
        [1] => stdClass Object(
                    [id] = 2
                    [text] = Описание
                )
        [2] => stdClass Object(
                    [id] = 3
                    [text] = Описание
                )
        [3] => stdClass Object(
                    [id] = 4
                    [text] = Описание
                )
    );

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

В шаблоне у на есть ссылка на модель и функцию перебора такого массива, к примеру
/template/index.php

<h1>Новые посты за сегодня</h1>
<?php echo $this->model_template->view($data, 0, 2) ?>

model_template — ссылка на класс модели.
view — функция класса model_template.
$data — наш массив
И теперь самое важное!
Мы передаем цифры 0 и 2, где 0 играет роль offset, т.е. отступ по ключу в цикле foreach, а цифра 2 количество новостей которое необходимо вывести. Думаю тут все понятно, так как ничего сверхъестественного нет xD

Ну а вот пример функции в которой перерабатываем массив при помощи foreach


class Model_template {
    
    publuc function view($data = array(), $offset = 0, $number = 10, $r = '')
    {
        if(empty($data))
        {
            $r = 'Новостей нет';
        }
        foreach($data as $count => $val)
        {
            if($count >= $offset && $count < $number)
            {    
                $r .= '<div>' . $val->text . '</div>';
            }
        }

        return $r;
    }    

}


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

/template/index.php

<h1>Новые посты за сегодня</h1>
    <?php echo $this->model_template->view($data, 0, 1) ?>
    <div>Баннер</div>
    <?php echo $this->model_template->view($data, 1, 2) ?>
    <div>Баннер 2</div>
    <?php echo $this->model_template->view($data, 2, 3) ?>
    <div>Баннер 3</div>
    <?php echo $this->model_template->view($data, 4, 5) ?>


При этом, мы в значительной мере сняли нагрузку с базы данных, что способствует быстрому формированию страницы, ну а php, в частности цикл foreach работает в данному случае быстро не затрачивая много времени на формирование контента, а так же нам не нужно обращать внимание на пагинацию (как в прошлом примере) в которой мы суммировали все посты и подготавливали вывод пагинации.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.