Leaderboard
Popular Content
Showing content with the highest reputation on 07/26/14 in all areas
-
1 pointВ этом случае мы теряем всю красивость ровно столько, сколько мы будем строить верхнее меню на основании структуры. Но это не является каноном - просто так повелось и устоялось))) Каждый сайт, для успешной работы, требует весьма основательной шлифовки и индивидуального подхода. После установки движка, первичного наполнения и привязки красивостей как раз только и начинается настоящая работа по его оптимизации и продвижению.
-
1 pointПринцип построения меню таков, что некая библиотека берет выжимку из структуры категорий и строит меню. Т.е. процесс происходит вне нашего контроля. Соответственно, наша задача состоит в том, что бы дополнить структуру нужными нам пунктами. Для агенси рассмотрим на примере purecss-меню. Для slidermenu все будет в принципе аналогично. За генерирование purecss-меню отвечает файл /apps/system/lib/frontend/menu/purecssmenu.php и все самое интересно происходит в функции get_menu(). 1. Тянем файл /apps/system/lib/frontend/menu/purecssmenu.php к себе в шаблон. Например в /template/frontend/имя_шаблона/main/menu/purecssmenu.php и переименовываем его в local_purecssmenu.php 2. Открываем переименованный файл и в его начале строку class PureCSS_Menu extends Structure_Manager {меняем на class Local_PureCSS_Menu extends PureCSS_Menu {3. Вытираем из этого файла все, кроме злополучной функции get_menu 4. Забор структуры происходит функцией $category_structure = $this->loadCategoryStructure();с этого момента в $category_structure хранятся данные для построения меню. Тут мы и устроим инжекцию. 5. Для начала нам надо узнать максимально существующее ИД категорий, что бы не накрыть существующий пункт. Для этого, сразу после $category_structure = $this->loadCategoryStructure(); добавляем: $max_id=0; //инициализируем переменную$keys=array_keys($category_structure['catalog']); //тащим все ключи пунктов структурыsort($keys); // сортируем их по возрастанию$max_id=end($keys)+1; //берем последний по порядку (т.е. самый большой) и инкрементируем его, что бы получить следующий, больший от самого большого существующего.6. Втыркиваем наши пункты. Что бы вставить пункт "Дневная аренда" с адресом /?daily_rent=1 нам нужно в структуру вставить $category_structure['catalog'][$max_id]['name']='Дневная аренда';$category_structure['catalog'][$max_id]['url']=SITEBILL_MAIN_URL.'?daily_rent=1';В 'name' название пункта, в 'url' - ссылка. Так же нам надо сообщить, что этот пункт будет входить в верхний уровень $category_structure['childs'][0][]=$max_id;Эти три строки вписываем после кода, добавленного в пункте 5. 7. Если надо добавить еще пунктов, то еще раз наращиваем $max_id на единицу и повторяем 6-й пункт. 8. Теперь нужно заставить движок вызывать именно наш файл создателя меню. Открываем /template/frontend/agency/main/main.php и ищем if ( $this->getConfigValue('menu_type') == 'purecss' ) {В этом блоке, где вызывается построитель purecss-меню require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/purecssmenu.php');$purecssmenu = new PureCSS_Menu();$this->template->assert('slide_menu', $purecssmenu->get_menu());меняем на require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/purecssmenu.php');require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/имя_шаблона/main/menu/purecssmenu.php');$purecssmenu = new Local_PureCSS_Menu();$this->template->assert('slide_menu', $purecssmenu->get_menu());Т.е. дополнительно подключили свой файл с генератором. Вызвали именно его, вместо стандартного и все.
-
1 pointНапример добавили мы два поля rental_price и rental_price_day - Месячная и подневная аренда. Добавляем в модель два поля типа price или safe_sring. Дополнительно можем прописать ограничивающие правила http://wiki.sitebill.ru/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%B2%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8 на целое значение или не пустоту. Со вводом закончено. Для вывода в карточку можно использовать автовывод, который выведет все значения не скрытые от просматриваемого пользователя правилами видимости. Быстро, но не слишком красиво. Можем наладить ручной вывод. В массиве {$data_shared} доступны ВСЕ активные элементы модели в формате модели. Т.е. что бы вывести стандартное поле цены, можно запросить {$data_shared.price.value}. Такой подход можно использовать почти ко всем элементам. Вывод в сетке немного отличается. Там данные сложены простым массивом. Т.е. если в просмотре доступ к rental_price = {$data_shared.rental_price.value}, то в сетке {$grid_items.rental_price} Конфликтовать элементы могут только в случае одинаковых системных имен. Иного я не припомню.