abushyk

Модераторы
  • Публикации

    4036
  • Зарегистрирован

  • Посещение

  • Days Won

    269

Все публикации пользователя abushyk

  1. Потому что первая строка там стоит. Которая всегда выводит значение price. {$grid_items[i].price|number_format:0:",":" "}ее убрать.
  2. А вот это {if $showed_price!=0}{$showed_price|number_format:0:",":" "}{else}В данный момент цена не доступна{/if}вставлено?
  3. Замените в во вставке в шаблон "||" на "&&" в обеих условиях. Упомянутый код в предыдущем сообщении вставляется в шаблон. Настройки - Дополнительно
  4. Галочку Обязательно я бы с Фото убрал. Не реально проверить эту зависимость, так как фотки мы начинаем приаттачивать уже ПОСЛЕ того, как запись залита в БД, что бы не делать лишней работы по обработке картинок, в случае облома при проверке данных самой записи. Выбор типа аплоадера остается в силе для uploadify_image-полей, который может работать либо от Аплоадфи, либо от ПлюАплоадера. Самому uploads на эту конфигу все-равно.
  5. А вот тут нужно конкрентно знать как и куда выводить. Вариант с соседней колонкой гиблый. Если у вас категория 20-й степени вложенности, то одной "колонкой рядом" не обойдешься. Самое фастфуд-решение: Есть такое значение {$grid_items[i].path} - оно используетися в агенси в выводе сетки иконками, а не таблицей (и должно быть доступно в любой сетке, в том числе и для ЛК), и содержит текстовую цепочку категорий, в которой находится объект. Например [path] => офис / Апартаменты / Квартирыдля объекта, который лежит в категории Квартиры, входящей в Апартаменты, которая входит в "офисы".
  6. тут просто нужно прикинуть логически. Например, у нас есть цена (price) и арендная цена (rental_price). Главная задача - сформулировать алгоритм когда что выводить. Допустим мы хотим вывести рентал_прайс только тогда, когда обычная прайс у нас пуста или равна нулую. Для этого делаем условную конструкцию {if ($grid_items[i].price!='' || $grid_items[i].price!='0')}{assign var=showed_price value=$grid_items[i].price}{elseif ($grid_items[i].rental_price!='' || $grid_items[i].rental_price!='0')}{assign var=showed_price value=$grid_items[i].rental_price}{else}{assign var=showed_price value=0}{/if}Другими словами, если ничего вменяемого в поле price у нас нет, мы проверяем rental_price. Если и там пусто, то записываем в переменную 0. В конце концов в showed_price у нас будет либо цена, либо цена аренды, либо 0 (логика "от фонаря", но направление мысли, я думаю, уловить можно). После этого нам остается только вывести {if $showed_price!=0}{$showed_price|number_format:0:",":" "}{else}В данный момент цена не доступна{/if}Грубо говоря, showed_price у нас будет содержать некую цену, которая будет варьироваться в зависимости от некоторых условий. Можно извратиться и по-другому. Тут уже все зависит от распущенности верстальщика и конкретного ТЗ.
  7. В этом случае мы теряем всю красивость ровно столько, сколько мы будем строить верхнее меню на основании структуры. Но это не является каноном - просто так повелось и устоялось))) Каждый сайт, для успешной работы, требует весьма основательной шлифовки и индивидуального подхода. После установки движка, первичного наполнения и привязки красивостей как раз только и начинается настоящая работа по его оптимизации и продвижению.
  8. Принцип построения меню таков, что некая библиотека берет выжимку из структуры категорий и строит меню. Т.е. процесс происходит вне нашего контроля. Соответственно, наша задача состоит в том, что бы дополнить структуру нужными нам пунктами. Для агенси рассмотрим на примере 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());Т.е. дополнительно подключили свой файл с генератором. Вызвали именно его, вместо стандартного и все.
  9. Например добавили мы два поля 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} Конфликтовать элементы могут только в случае одинаковых системных имен. Иного я не припомню.
  10. значит везде нужно заменить daily_rent _id на daily_rent С большой долей вероятности.
  11. Не буду утверждать, что тормозит из-за этого, но и не буду опровергать. Попробуйте заменить строку $kvartira_model['data'] = $data_model->init_model_data_from_request($kvartira_model['data']);на $kvartira_model['data']['daily_rent_id']['value']=(int)$this->getRequestValue('daily_rent_id');
  12. То просто в шаблоне Посуточная аренда <input type="checkbox" name="daily_rent"{if isset($smarty.get.daily_rent)} checked="checked"{/if} value="1" />или daily_rent заменить на daily_rent_id, смотря какое системное имя у поля.
  13. Тогда лучше оставить. Главное поменять как я показал, что бі ваши действия віполнялись после основных движковых операций - так как по сути вы дополняете функционал.
  14. после $kvartira_model = $data_model->get_kvartira_model(true) точку с зяпятой поставьте
  15. 1-2. Для вставки обычного чекбокса нет надобности наследовать целый Kvartira_Search_Form Если уже потянули, то делаем daily_rent_id - системное имя чекбокса отвечающего за признак Посуточной <?phpclass Local_Kvartira_Search_Form extends Kvartira_Search_Form {function main () {parent::main();$data_model = new Data_Model();$kvartira_model = $data_model->get_kvartira_model(true)$kvartira_model['data'] = $data_model->init_model_data_from_request($kvartira_model['data']);$form_generator = new Form_Generator();$this->template->assert('daily_rent_list', $form_generator->get_checkbox($kvartira_model['data']['daily_rent_id']));}}3. Тут все верно 4. В шаблон выводится так В {$daily_rent_list} лежит уже готовый чекбокс (<input... />). Нужно только вставить в нужное место. То, что вывели вы - это как раз вариант без привлечения Local_Kvartira_Search_Form. Это не зависит от схемы. Тронули ползунок - сменили лимиты цен - наложилось новое условие фильтрации.
  16. Если под "сингл пэйдж" имеется в виду, что файл шаблона является полноценной законченной html-страницей\документом, способной существовать автономно, то нет. Обычно в шаблонах для сайтбилля только одна страница является такого типа - main.tpl, которая включает все. Остальные файлы шаблона - частички страниц, которые подключаются в нужные места.
  17. 1. Насчет вставки ссылки в главное меню. Можно. Но нужно учесть некоторые моменты а) это меню генерируется автоматически на основании содержимого Структуры. Поэтому, что бы его туда вставить, возможно, понадобиться создать некий свой код, который бы дополнил автоматически созданное меню новым пунктом б) способы генерирования этого меню разнятся от шаблона к шаблону. вполне возможно, что можно будет вставить просто средствами дописки разметки в шаблон. Тут нужно смотреть конкретный случай. 2. Вогнать в форму поиска. Этот пункт имеет более широкое значение. Любая фильтрация обрабатывается движком исходя из параметров переданных в запросе. Если вы, каким-либо образом, передали в запросе некий параметр (с формы поиска или с готовой ссылки с параметрами), движок должен уметь его обработать. Так как Редактор форм позволяет легко вводить свои поля в модель объявления предугадать что добавит себе пользователь не реально. Именно поэтому сайтбиль обрабатывает только ограниченный набор предопределенных переменных. например передав в запросе переменную not_last_floor вы можете рассчитывать, что движек в выдаче объявлений выдаст только те у которых значение поля floor не будет равняться значению поля floor_count. Аналогично с полем price. Передав параметр price движек отфильтрует выдачу так, что вернутся те, у кого значение в поле price будет меньше переданного значения. Но таких автообрабатываеміх переменных не много. Для "своих" прийдется указать движку как их обработать и какую фильтрацию применить. Для этого служат манипуляции с template_search.php 3. Как вариант возможно и это. Для того, что бы предоставить пользователю доступ к нужной информации хороши все пути. 4. избавиться от заполнения поля "Количество комнат" В принципе такое возможно. Не настройками, а программированием. Но я бы не делал вообще никаких связок между Категориями и другими признаками объявления. Вообще категория с названием "Продать 3-х комн. квартиру" - это яма себе же. Только в одном признаке вы закодировали сразу тир - тип операции (продажа\аренда), комнатность и тип недвижимости (квартира, дом, ...). Есть большой соблазн использовать Структуру именно таким образом, поскольку на ее основании создается навигационная менюха. Но это плохо. Каждый признак объявления должен быть атомарным. Это даст большую гибкость и при поиске в том числе. Грубо говоря, Структура должна содержать признаки исключительно типа недвижимости. Даже не смотря на то, что при инсталляции там закатывается совсем иное. 5. Какие шаблон, браузер и форма?
  18. Вероятность есть, но она мала, так как вы правили javascript-код, а он к формам и выводу имеет косвенное значение.
  19. Логика такая. все, что подается гостем (незарегистрированным пользователем) без всяких настроек ставится в неактив. Тут простая логика целесообразности. если подается с ЛК, то тут возможность активированния можно регулировать. Если доверять авторизированным пользователям, то можно выключить деактивацию до премодерации и вывести чекбокс Публиковать на сайте в доступ всем пользователям, что бы они могли самостоятельно управлять активностью. Если пользователей много и не все они знакомы, то лучше перебдеть и ограничить их управление активностью. Разница между подачей через кнопку и ЛК есть, но она не сильная. Если пользователь авторизирован и нажал на кнопку Подать объявление, то он перенесется в ЛК на функцию подачи объявления из ЛК (в старых версиях шаблонов). В новых лучше предусмотреть в шаблоне спрятывание кнопки Подать объявление для авторизированного. Разделить по группам срабатывание премодерации без колдовства сейчас не получится. А вот отключить подачу неавторизированными можно. Для этого нужно убрать кнопку Подать объявление, а в /template/frontend/agency/main/main.php убрать обработчик подачи объявление, который выглядит как if ( !$has_result && preg_match('/^add(\/?)$/', $REQUESTURIPATH) ) {...}Авторегистрация - это такая опция в Общих настройках (Включить авторегистрацию), которая, при подаче объявления гостем, из данных в объявлении (Ваше ФИО, телефон, мейл) создает аккаунт на который привязывает поданное объявление. И подавший может потом воспользоваться входом в него для корректировки или удаления объявления, а так же для подачи нового. REоффтоп. С футболом сложно. Чем ближе расположен стадион, на котором проходит матч, к дому, тем сложнее на него выбраться. Так что на новую арену-львов, которая расположена в пару остановках от дома, я так до сих пор и не выбрался)))
  20. 1) Все объявления поданные с фронта сайта через форму /add/ при отключенной опции авторегистрации привязываются к некоторому абстрактному пользователю с именем Незарегистрированный. 2) данная опция не дает активировать объявление из ЛК разрешая пуликацию на сат ТОЛЬКО администратору из админпанели. Т.е. даже если владелец отметит Активно в ЛК и сохранит, галочка все-равно будет сброшена и поставить ее сможет только админ после проверки. 3) а некоторые операции стоит блок-проверка доступности операции для админа. если в одном браузере открыт и фронт и админка. и там и там с залогинившимися пользователями - может наступить момент, что их сессии частично перекроют друг друга, что может привести к некоторым глюкам. Попробуйте закрыть браузер, а после открытия, зайти просто в админку и посмотреть сохранилась ли проблема.
  21. Это не "старый вид". Это включены фронтальные секти настраиваемые пользователем. Попробуйте поставить галочку Общее - Блокировать фронтальные сетки пользователя
  22. фтп доступ и доступ в админку на abushyk$gmail.com (доллар на собаку заменить). сегодня-завтра посмотрю, что там случилось.
  23. в первую очередь. съехавшая разметка - признак того, что где-то непозакрывали теги.
  24. Первым делом посомотрите в Редакторе форм - права видимости для каких групп указаны для пропавших полей.
  25. Я наверное чего-то не понимаю, но зайдя в ЛК на сайте я: 1. Не нашел поля для указания координат. 2. Не нашел географических данных для объявления, окромя Город, чего явно мало даже для поверхностного геокодирования.