Как разделить новости для вставки рекламы
В прошлой статье уже обсуждали разделение контента на части для вставки каких либо блоков с рекламой или же другими плюшками. Так же в предыдущей статье мы делали несколько SQL запросов, к примеру если нужно было разделить контент на 2 части, нужно было создать два обращение в базу данных, во втором случае проставив обычный отступ записей при выборке. Да, это вариант, но он создает много лишних запросов и конечно же наш мускул при этом страдает, особенно если говорить о высокопосещаемых сайтах, где каждый кусок кода должен быть оптимизирован для снятия излишних нагрузок на сервер.
И так как же все таки правильно поступить, чтобы вставить к примеру блок рекламы на страницы сайта между новостями и при этом не затрагивать «стандартную» выборку из базы данных.
Все очень просто!
Обычно новости на главных страницах или разделах, формируются/перебираются циклом foreach, он как раз таки нам и нужен.
К примеру переменная $data содержит массив объектов вида.
Обычно при использовании шаблонной структуры сайта, мы передаем данные в модель для перебора такого массива и предоставления сформированного уже в HTML контента.
В шаблоне у на есть ссылка на модель и функцию перебора такого массива, к примеру
/template/index.php
model_template — ссылка на класс модели.
view — функция класса model_template.
$data — наш массив
И теперь самое важное!
Мы передаем цифры 0 и 2, где 0 играет роль offset, т.е. отступ по ключу в цикле foreach, а цифра 2 количество новостей которое необходимо вывести. Думаю тут все понятно, так как ничего сверхъестественного нет xD
Ну а вот пример функции в которой перерабатываем массив при помощи foreach
Вот собственно и все!
Теперь в шаблоне можно выводить хоть через каждый пост, баннер или другой какой нибудь блок, и выглядеть это будет так
/template/index.php
При этом, мы в значительной мере сняли нагрузку с базы данных, что способствует быстрому формированию страницы, ну а php, в частности цикл foreach работает в данному случае быстро не затрачивая много времени на формирование контента, а так же нам не нужно обращать внимание на пагинацию (как в прошлом примере) в которой мы суммировали все посты и подготавливали вывод пагинации.
И так как же все таки правильно поступить, чтобы вставить к примеру блок рекламы на страницы сайта между новостями и при этом не затрагивать «стандартную» выборку из базы данных.
Все очень просто!
Обычно новости на главных страницах или разделах, формируются/перебираются циклом 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 комментариев