С момента выхода стабильного релиза новой версии движка Simpla прошло более месяца. В силу работы над другими проектами не было возможности детально изучить нововведения системы. Для меня, как программиста несомненным плюсом было введение API и полный переход на модель MVC (модель — отображение — контроллер). Правда ограничиться работой только с отображением не получилось при экспериментах, но в описываемой далее задаче эта схема полностью себя оправдала.

Необходимо было убрать список брендов — оставив только 2 случайных а остальные вынести под ссылку «Все бренды». Т.е. надо сделать страницу отображения всех брендов на отдельной странице.

Первым делом решим задачу со случайными брендами. Да, Smarty (разметка шаблонов) позволяет выбирать случайные записи из массива, коими и является список брендов. Но для меня было проще написать метод в контроллере — быстрее и надежнее (в чем проблемы с методом Smarty можете посмотреть в Google). Правим контроллер api/Brands.php — после метода get_brands добавляем свой под названием get_rand_brands:

30
31
32
33
34
35
36
37
38
39
	public function get_rand_brands($count = 2)
	{
		$brands = array();
		$category_id_filter = '';
		// Выбираем все бренды
		$query = $this->db->placehold("SELECT id, name, url, meta_title, meta_keywords, meta_description, description, image FROM __brands WHERE 1 ORDER BY RAND() LIMIT $count");
		$this->db->query($query);
 
		return $this->db->results();
	}

Параметром к методу является количество случайных брендов. И следовательно в отображении view/IndexView.php вместо выбора всех брендов делаем выборку наших случайных.

64
65
$brandni = $this->brands->get_rand_brands(2);
        $this->design->assign('brandni', $brandni);

Теперь в шаблоне design/{ваш_шаблон}/index.tpl вместо полного списка брендов, будет выводить случайный набор из 2 брендов. Кстати, помимо названий брендов, можно отображать еще и логотипы компаний (тоже приятное нововведение в новой Симпле). Для этого внутри циклы вывода бренда делаем вывод лого конструкцией типа

<a href="brands/{$brand->url}"><img src="./files/brands/{$brand->image}" alt="{$brand->name}" border="0" /> </a>

В конце блока вывода брендов добавляем ссылку на все бренды

<a href="brands/">Все бренды</a>

Теперь шаг второй — добавление самой страницы.

Добавим с .htaccess перекидку на новый модуль — сразу после редиректа на страницу продукта (перед редиректом по брендам ~31 строка) добавим свой код

31
RewriteRule ^brands/?$    index.php?module=BrandsView [L,QSA]

Теперь при отображении через адресную строку http://{ваш_сайт}/brands система будет перебрасывать на модуль BrandsView, который нам и надо сделать.

Создаем файл подготовки данных view/BrandsView.php, который формирует данные для страницы брендов. Кода немного, поэтому привожу его целиком

<?PHP
require_once('View.php');
class BrandsView extends View
{
    function fetch()
    {   
        // Выбираем товар из базы
        $this->design->assign('meta_title', 'Все производители');
        $this->design->assign('meta_keywords', 'Все производители');
        $this->design->assign('meta_description', 'Все производители');
 
        $brands = $this->brands->get_brands();
        $this->design->assign('brands', $brands);
 
        return $this->design->fetch('brands.tpl');
    }
}

И теперь делаем вывод всего этого в новый шаблон design/{ваш_шаблон}/brands.tpl

    {if $brands}
 
    <!-- Список брендов -->
    <ul>
 
        {foreach $brands as $brand}
        <!-- Бренд -->
        <li>            
            <!-- Фото бренда -->          
            {if $brand->image}
            <div><a href="brands/{$brand->url}"><img src="./files/brands/{$brand->image}" alt="{$brand->name|escape}"/></a></div>
            {/if}
            <!-- Фото бренда (The End) -->
            <!-- Название бренда -->
            <h3><a href="brands/{$brand->url}">{$brand->name|escape}</a></h3>
            <!-- Название бренда (The End) -->  
        </li>
        <!-- Бренд (The End)-->
        {/foreach}    
    </ul>
    <!-- Список брендов (The End)-->
    {else}
    Бренды не найдены<br /><br />
    {/if}

Вот на сегодня и все. Пробуйте! Экспериментируйте! Всем удачи!

P.S. Система однозначно стала удобнее и логичнее. Только все наработки сделанные для прошлой системы придется переделывать уже под новую систему.

Опубликовать в Яндекс
Опубликовать в Facebook
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Google Plus
Опубликовать в Google Buzz