Simpla 2.0, или первый опыт работы с API системы: страница «Все бренды»
Дата: 22 Сен ' 11 Автор: mart Рубрики: Программирование
С момента выхода стабильного релиза новой версии движка 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. Система однозначно стала удобнее и логичнее. Только все наработки сделанные для прошлой системы придется переделывать уже под новую систему.
11 комментариев
-
Денис
24|Сен|2011 1выхода стабильного релиза новой версии движка Simpla прошло более месяца
А можно прув линк?
-
25|Сен|2011
2
Линк надо брать у разработчика 🙂 В моей помощи он отказался, а конечной версии сам жду. Было написано, что стабильной, но не факт, что она окончательная.
-
Kosjak76
25|Сен|2011 3Заметил одну странность, написано, что код для файла view/Brands.php, а код приведен для brands.tpl, кода view/Brands.php нет…
-
25|Сен|2011
4
Да, сорри, этот визивиг-редактор все порезал… Поправил код!
-
Евгений
27|Сен|2011 5view/Brands.php не правильно а надо view/BrandsView.php
-
23|Ноя|2011
6
Это первый опыт, а ввиду отсутсвия документации еще и «пробирание на ощупь».
-
Beagler
17|Мар|2012 7Все равно отличный урок. Спасибо.
-
Sudba
22|Мар|2012 8Для версии 2.1.0 не подходит!
-
Dim@
29|Июн|2012 9Хороший пример изменения API, подскажите пожалуйста как сделать некий фильтр для отображения в любой выбраной категории товаров(продуктов) определенных выбранных брэндов? =| был бы благодарен
-
Алексей
15|Янв|2013 10$brandni = $this->brands->get_rand_brands(2);
$this->design->assign(‘brandni’, $brandni);Подскажите, куда это вставлять? Все сделал, а это не могу.
Заранее спасибо ! -
Sam
28|Янв|2014 11для 2.2.4 он робит,а то все сделал по инструкции по сылке ww.site.ru/brands пустое окно