Leaderboard


Popular Content

Showing content with the highest reputation since 09/22/18 in all areas

  1. 3 points
    Ну или вариант готового блока кнопок, под заголовок объявления: <div class="editblock"> <a title="На главную" href="/" class="btn btn-info"><i class="icon-white icon-home"></i></a> <a title="Назад" href="#" onclick="history.back();return false;" class="btn btn-info"><i class="icon-white icon-chevron-left"></i> Назад</a> {if $apps_pdfreport_enabled==1} <a title="Печать PDF" href="?format=pdf" class="btn btn-info"><i class="icon-white icon-print"></i></a> {/if} <a title="Печать" href="#" onClick="window.print()" class="btn btn-info"><i class="icon-white icon-print"></i></a> {if $photo|count>0} <a title="Скачать все фото" href="{$estate_folder}/imgzip/{$data.id.value}" class="btn btn-info"><i class="icon-white icon-share-alt"></i></a> {/if} {if $data.user_id.value eq $smarty.session.user_id} <a title="Редактировать" href="{$estate_folder}/account/data/?do=edit&id={$data.id.value}" class="btn btn-warning"><i class="icon-white icon-pencil"></i></a> <a title="Удалить" href="{$estate_folder}/account/data/?do=delete&id={$data.id.value}" class="btn btn-danger"><i class="icon-white icon-trash"></i></a> {/if} </div> Последние кнопки Редактировать и Удалить для удобства владельца объявления и показываются зарегистрированным - риэлтору, админу... кого определите в настройках. К стати, можете "Выгрузить все фото" переместить к показу не всем а туда-же, к зарегистрированным, если это платная услуга.
  2. 2 points
    Дмитрий Кондин

    Обновление system 4.1.8

    Для обновления вам нужно сначала включить на сервере PHP 7.1 Затем обновить приложение third, после появится возможность обновить system и все остальное (обновите). Затем можно на сервере включать PHP 7.3, но можно и на 7.1 остаться. Из глобальных улучшений - внедрили поддержку blade-шаблонов, думаю вскоре выпустим новый шаблон на Blade, вместо устаревшего Smarty. Также в систему мы активно внедряем компоненты фреймворка Laravel.
  3. 2 points
    Дмитрий Кондин

    Миллион для Sitebill

    Друзья! Sitebill участвует в гранте на 1 миллион рублей! Проголосуйте, пожалуйста! Мы на этот миллион так Sitebill обновим, что не узнаете ) https://kassa.yandex.ru/grant-project-des-743/
  4. 2 points
    1. В редакторе форм нужно добавить для текстового поля или для строки поле для хранения языковой версии. Если это поле называется text, тогда для хранения английской версии нужно создать поле text_en 2. Получаем ключ Google Translation API https://cloud.google.com/translate/docs/getting-started Внимание! API перевода платное, вам нужно будет в гугле добавить информацию о способе платежей. 3. Включаем в настройках - Редактор перевода опцию Использовать мультиязычность (apps.language.use_langs) 4. Прописываем ключ Google Translation API в поле Google Translate API key получить (apps.language.google_translate_api_key) 5. Теперь при создании объявления можно заполнять только поле русского описания 6. Чтобы появился перевод - сохраните объявление и откройте его на редактирование снова 7. Теперь можно сохранять --------- Переводить можно любые поля textarea, safe_string - если добавлять к ним языковые постфиксы с нужным языком.
  5. 2 points
    ckeditor настраиваемый, вот описание по настройке либо тут . Самое главное смотрите какая стоит у вас версия
  6. 2 points
    TopRaN

    Как Добавить Надпись VIP

    тут подсказка
  7. 2 points
    Будем внедрять эту функцию.
  8. 2 points
    У нас появился чемпион по оптимизации скорости сайта - kvart.by Не знаю как, но они сделали 100!
  9. 2 points
    Дмитрий Кондин

    С Новым 2020 Годом!

    Пусть в этом году бизнес получит новую энергию и порадует вас хорошим доходом!
  10. 2 points
    TopRaN

    Делаем правильный OpenGraph

    <meta property="og:title" content="{if $meta_title != ''}{$meta_title}{else}Мой сайт{/if}"> <meta property="og:description" content="{if $meta_description != ''}{$meta_description}{else}{$data.text.value|truncate:200}{/if}"> <meta property="og:image" content="http{if $smarty.server.HTTPS ne ''}s{/if}://{$smarty.server.HTTP_HOST}/img/data/{$photo[0].normal}" alt="{$title}"> <meta property="og:type" content="website"> <meta property="og:type" content="http{if $smarty.server.HTTPS ne ''}s{/if}://{$smarty.server.HTTP_HOST}" /> <meta property="og:url" content="http{if $smarty.server.HTTPS ne ''}s{/if}://{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}"> <meta property="og:site_name" content="{$title}"> <meta property="og:logo" content="http{if $smarty.server.HTTPS ne ''}s{/if}://{$smarty.server.HTTP_HOST}/template/frontend/{$current_theme_name}/img/logo.png" alt=""> <meta property="og:locale" content="ru_RU"> в тег html <html xmlns:og="http://ogp.me/ns#"/>
  11. 2 points
    Допустим у нас в таблице user мы добавили поле Должность и системное название этого поля jobtitle 1. Открываем файл /template/frontend/ipotekus/main/main.php Находим там функцию private function getAgents() { $ret = array(); $DBC = DBC::getInstance(); $query = 'SELECT COUNT( d.id ) AS _cnt, u.user_id, u.fio, u.phone, u.imgfile, u.mobile, u.email, g.name AS group_name FROM `' . DB_PREFIX . '_data` d LEFT JOIN re_user u USING ( user_id ) LEFT JOIN ' . DB_PREFIX . '_group g USING ( group_id ) WHERE u.group_id<>4 GROUP BY d.user_id ORDER BY _cnt DESC'; $stmt = $DBC->query($query); if ($stmt) { while ($ar = $DBC->fetch($stmt)) { $ret[] = $ar; } } return $ret; } Тут нам нужно поменять строчку запроса на такую (добавляем выборку jobtitle из таблицы) $query = 'SELECT COUNT( d.id ) AS _cnt, u.user_id, u.fio, u.phone, u.imgfile, u.mobile, u.email, u.jobtitle, g.name AS group_name FROM `' . DB_PREFIX . '_data` d LEFT JOIN re_user u USING ( user_id ) LEFT JOIN ' . DB_PREFIX . '_group g USING ( group_id ) WHERE u.group_id<>4 GROUP BY d.user_id ORDER BY _cnt DESC'; Теперь в шаблоне agents_list_on_main.tpl у нас будет доступна такая переменная внутри foreach цикла {$agentslist_item.jobtitle} Вы можете вписать эту переменную для вывода jobtitle Например, меняем эту строчку <p class="team-designation"><a href="#">Должность</a></p> На такую <p class="team-designation"><a href="#">{$agentslist_item.jobtitle}</a></p>
  12. 2 points
    dmpress

    Ускорение загрузки сайта

    вот и повод есть)) оптимизируете людям сайт, по ходу оптимизации сделаете скрины с комментариями и разместите здесь - польза всем!
  13. 2 points
    dmpress

    Ускорение загрузки сайта

    Ну, во-первых, форум для того и есть чтобы публиковать решения которые могут повторить другие пользователи. А во-вторых - вы не знаете какие настройки мне нужны, а какие нет. Как разработчики вы должны дать хотя бы список того, где могут быть тормоза и мы, как пользователи, уже сами будем включать/выключать и тестировать. В чем сложность-то? Сделайте скрины админки и прямо на скринах напишите что можно потестировать. Админки у всех одинаковые, зачем вам для этого доступ к моей админке? Вон Chernetskiy выше описал как легко оптимизируется Вордпресс. Я так понял это намёк - зачем вам Сайтбилл, переходите на Вордпресс...
  14. 2 points
    dmpress

    Ускорение загрузки сайта

    Получается у всех работает медленно и все этим довольны?)) Ребята, действительность такова, что в конкурентных нишах медленных сайтов в топе поисковиков уже нет или скоро не будет. Гугл вообще на первое место поставил мобильную выдачу, если у вас показатель по тесту скорости загрузки от гугла для мобильников меньше 50 - вылет из топа дело времени... это если вы там вообще есть... Т.е. оптимизировать и продвигать медленный сайт - бесполезная трата денег. Теоретически даже не оптимально собранный движок может работать быстро при правильно настроенном окружении. Как примеры, битрикс, тяжелые шаблоны вордпресс и тп. Уважаемые разработчики - как правильно настроить окружение для быстрой работы сайтбилла? Или это не возможно? Или настолько дорого, что теряется всякий смысл?
  15. 2 points
    Chernetskiy

    Турбо страницы отладка

    Вы наверное плохо представляете, для чего создан канал Турбо в Яндексе. А смысл в том, чтобы посетителю поисковика в сокращенной форме предоставить свежую и актуальную информацию. Тащить туда всю базу недвижимости нет смысла, поскольку поисковик не станет засорять канал только вашими объектами. Посетителей много, у всех свои интересы и их интересует не только недвижка, кому-то интересны авто, кому-то кройка и шитьё, кому-то тряпки, игры и т.п. Соответственно, описковик, в соответствии с интересами пользователя выдает ему варианты турбо-страниц от разных источников. Публикация тубро-новостей имеет приоритет и позволяет пользователю подписаться на ваш канал. Вы в свою очередь, публикуете новость, например, лезем на ЦИАН, качаем оттуда обзор рынка загородной недвижимости за последний месяц-квартал по деревне Гадюкино, переписываем его на свой лад, статьей на 300 слов, вставляем в текст пару ссылок на раздел с загородной недвижимостью по Гадюкино (одну на дома, вторую на участки, может еще третью на предложения девелоперов на вашем сайте), добавляем 1-2 картинки и публикуем новость. Эта новость будет Яндексом предложена всем в Гадюкино, кто ищет загородку, соответственно по ссылкам народ будет заходить на ваш сайт и искать конкретику. В приницпе, это будут заинтересованные (горячие) клиенты, с которыми можно работать. Сама по себе публикация новостей поднимает посещаемость на сайте, а в варианте Турбо вы получаете еще и целевую аудиторию.
  16. 2 points
    Каюсь, есть у мена такое - пишу "в будущих версиях" на автомате, а что я еще могу сказать ) Ну теперь начинаю думать, что пуши с большей вероятностью появятся.
  17. 2 points
    Относительно п. 2, пожалуй многим будет удобнее в редакторе шаблонов создать под счетчики отдельный шаблон, например counter.tpl, куда вставить различные коды счетчиков, может еще что-нибудь - чаты, и т.п. со сторонних ресурсов, чтобы потом проще было искать и не накосячить в коде футера... {literal} сюда пихаем коды {/literal} После чего подключить этот шаблон в футер, например в realia удобно будет в конце, примерно здесь: ... <div class="span6 share"> <div class="content"> {include file='counter.tpl'} <ul class="menu nav"> <li class="first leaf"><a href="https://plus.google.com/+Realty-centrumRu" class="google" target="_blank">Google+</a></li> <li class="leaf"><a href="https://www.facebook.com/RealtyCentrum" class="facebook" target="_blank">Facebook</a></li> <li class="leaf"><a href="https://twitter.com/Realty_Centrum" class="twitter" target="_blank">Twitter</a></li> <li class="leaf"><a href="https://vk.com/realty_centrum" class="vimeo" target="_blank">ВКонтакте</a></li> <li class="leaf"><a href="https://ru.linkedin.com/in/chernetskiy" class="linkedin" target="_blank">LinkedIn</a></li> <li class="last leaf"><a href="https://www.instagram.com/realtycentrum/" class="flickr" target="_blank">Instagram</a></li> </ul> </div> </div> </div> </div> </div> </div> В данном случае, даже если счетчик будет видимым, он будет показываться в самом низу сайта в середине.
  18. 2 points
    У вас переделан main.php - поэтому для него нужно делать собственный обработчик. Вам в раздел фриланса.
  19. 1 point
    Наверное большое количество объектов и серверу не хватает время на его обработку.
  20. 1 point
    Такое реализовано в первых версиях шаблона agency. Смотрите вложение realty_view.tpl
  21. 1 point
    1. Вы используете модальное окно у которого имеется id="myModal". Дело в том что этот id присваевается одному элементу - первому, а для остальных нет. Id должно иметь уникальное значение и оно должно быть в единственном экземпляре. свой код замените на этот <button type="button" class="btn btn-default btn-lg" data-toggle="modal" data-target="#myModal{$grid_items[i].id}">Контакты</button> <!-- Modal --> <div class="modal fade" id="myModal{$grid_items[i].id}" role="dialog"> <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">Контакты</h4> </div> <div class="modal-body"> <p>{$grid_items[i].phone}</p> </div> </div> </div> </div>
  22. 1 point
  23. 1 point
    Даже удивительно, что никто не сравнивает тут свои ИКСы ))) Кстати, смотрю - на cmsmagazine заменили ТИЦ на ИКС - в первой 20ке для нашего sitebill 3 созданных мною сайта!
  24. 1 point
    Уточните, вам надо чтобы по умолчанию объявления открывались в виде блоков (как на скрине)? Для этого зайдите в Настройки -> Общие, в позиции: Тип списка объявлений (list - обычная таблица, thumbs - div-блоки(grid_type) пропишите нужное значение, соответственно thumbs и всё будет по феншую.
  25. 1 point
    Закинул в раздел Файлы пакеты документов по обработке персональных данных в агентстве. Если кому интересно, качайте, заполняйте, распечатывайте и пользуйтесь. Предполагается, что частный риэлтор или агентство недвижимости в лице ИП или ООО являются агентами по обработке персональных данных и должны быть зарегистрированы в Роскомнадзоре. Их, в свою очередь, как раз эти документы и будут интересовать.
  26. 1 point
    В фильтр: <div class="col-md-2"> <label>Поиск по группе</label> {$users_groups_list} {if $country_list ne ''} {$country_list} {/if} </div> А в /home/uqirahbm/public_html/template/frontend/ВАШ ШАБЛОН/main/main.php $this->getNewest(); $groups=array(); $DBC=DBC::getInstance(); $query='SELECT group_id, name FROM '.DB_PREFIX.'_group WHERE group_id NOT IN (1,4,19,26,27,28,33) ORDER BY name'; $stmt=$DBC->query($query); $select='<option value="">Не важно</option>'; if($stmt){ while($ar=$DBC->fetch($stmt)){ $groups[$ar['group_id']]=$ar['name']; $select.='<option value="'.$ar['group_id'].'"'.(intval($_GET['group_id'])==$ar['group_id'] ? ' selected="selected"' : '').'>'.$ar['name'].'</option>'; } } $this->template->assign('users_groups_list', '<select name="group_id">'.$select.'</select>'); $this->template->assign('users_groups', $groups); (В скобках запрещенные к показу группы) А если поиск по пользователям то в фильтре: <div class="col-md-2"> <label>Поиск по сотруднику</label> {$users_users_list} <!--select name="user_id"><option value="">Не важно</option></select--> </div> А в main.php^ $users=array(); $DBC=DBC::getInstance(); $query='SELECT user_id, fio FROM '.DB_PREFIX.'_user WHERE group_id NOT IN (1,4,18,19,26,27,32,38) ORDER BY fio'; $stmt=$DBC->query($query); $select='<option value="">Не важно</option>'; if($stmt){ while($ar=$DBC->fetch($stmt)){ $users[$ar['user_id']]=$ar['fio']; $select.='<option value="'.$ar['user_id'].'"'.(intval($_GET['user_id'])==$ar['user_id'] ? ' selected="selected"' : '').'>'.$ar['fio'].'</option>'; } } $this->template->assign('users_users_list', '<select name="user_id">'.$select.'</select>'); $this->template->assign('users_users', $users); Вот мой файл: main.php
  27. 1 point
    Chernetskiy

    Мультиязычный сайт

    А что именно вы собрались удалять из индекса "с автопереводом"? Бесплатные мультиязычные плагины осуществляют автоперевод по приниципу что есть в окне браузера, то и переводим. Физически страница сайта остается в единственном варианте и на единственном языке, нет никаких дублей а соответственно нет их индексации. Автоперевод осуществляется в кэш или в темп-файл браузера после загрузки страницы в браузер в вариантах: либо по настройке языка браузера (автоматом, открыл турок - перевелось на турецкий и т.п.) или по команде пользователя - выбором нужного языка в меню сайта. В платных версиях мультиязычных плагинов уже есть возможность вручную или автоматически создавать дополнительные страницы на нужных языках либо на основе поддомена - en.site.ru/..., либо на основе отдельной папки - site.ru/en/... (смотри настройки плагина). В частности Гугл предоставляет услугу транспорта доставки интеллектуальных переводов, т.е. к вашему сайту автоматически будут созданы вышеуказанные языковые варианты сайта и пользователю будут доставляться не технические и кривые, а качественные переводы исходных страниц сайта на нужном ему языке. Такие страницы сайтов хранятся в облаке, привязаны к вашему сайту и индексируются поисковиками как реальные страницы сайта на разных языках, что приветствуется Гуглей и Яшей. Как работает бесплатный вариант плагина можно посмотреть например на сайте питомника Шпицов, внизу справа на сайте плавает значок с флажком и надписью Русский, кликните и выберите другой язык из списка и получите результат хоть на языке Бахаса Мелау (Малазия)
  28. 1 point
    TopRaN

    Установка на denver

    Выкинуть Денвер и поставить нормальный виртуальный сервер. OpenServer.
  29. 1 point
    Да особо никакую, хотя возможностей полно (Afy, Агентон, Земформат, SPN24 и т.д.).
  30. 1 point
    Chernetskiy

    Форма Поиска

    Параметром depended вы ссылаетесь на родительский справочник, он должен быть единственным, перечисления не допускаются. Параметром linked вы подключаете подчиненные справочники, их может быть несколько. Например, при подчиненности справочников Страна - Регион - Район - Город - Улица вы организуете соответствующие связи: для Страны (country_id) через linked=region_id,country_id привязываем Регионы для Региона (region_id) через depended=country_id привязываем родителя - Страны и через linked=city_id,region_id;raion_id,region_id;direction_id,region_id привязываем подчиненные Города, Районы (областные, кастомный справочник) и Шоссе (кастомный) для Районов (областных - raion_id) через depended=region_id привязываем родителя - Регионы и через linked=city_id,raion_id привязываем подчиненные Города для Городов (city_id) через depended=raion_id привязываем родителя - Районы (областные) и через linked=district_id,city_id;street_id,city_id;metro_id,city_id привязываем подчиненные справочники Районов города, Улиц и Метро и т.д., соответственно в кастомных справочниках (Районы, Шоссе и т.п) тоже не забываем прописать связь на родителя (depended). в конечных справочниках linked соответственно не указывается, т.к. ничего в подчинении уже нет.
  31. 1 point
    Я хочу завести в базу клиента -покупателя. и чтобы определенные параметры его запроса - являлись фильтром базы квартир! таким образом, чтобы после добавления клиента, программа формировала список подходящих ему объектов, а я в свою очередь могла бы удалять или добавлять еще их. Таким образом для каждого клиента будет сформирован "подбор" по которому уже свободно распечатав- можно побежать на показы. Есть какое-то реальное предложение по этому поводу? или может есть готовый модуль?
  32. 1 point
    Дмитрий Кондин

    Верхнее меню

    Покажите код, который вы вставили? Вы так меню создавали? http://wiki.sitebill.ru/index.php?title=Меню В вашем случае код должен быть такой <ul class="menu nav"> {section name=i loop=$fastmenu} <li><a href="{$fastmenu[i].url}">{$fastmenu[i].name}</a></li> {/section} </ul>
  33. 1 point
    Дмитрий Кондин

    Уникальное поле

    Сделайте уникальный индекс прямо в базе через phpmyadmin. Например, для поля email делаем его уникальным так: create unique index email_idx on re_user(email); Тогда mysql точно не пропустит дублей. Но если у вас уже насорило дублями, то предварительно придется почистить от дублей вручную.
  34. 1 point
    Chernetskiy

    Мультиязычный сайт

    На своих сайтах на Wordfpress для мультиязычности сайта использую плагин Gtranslate. Этот плагин может использоваться на Joomla, Drupal, Magento и на обычных HTML-сайтах, что думаю для Sitebill вполне подойдет (не пробовал). Плагин работает на Javascript. В бесплатной версии плагин осуществляет машинный перевод на сотню языков - пользователь только выбирает язык, на который нужно перевести сайт или в настройках можно указать, чтобы пользователю автоматически сайт открывался на языке его браузера. При этом переводы сайта не сохраняются, ссылки страниц сайта не изменяются. В платной версии есть дополнительные плюшки - можно создавать версии сайта на соответствующем языке через подкаталоги или поддомены - соответственно mysite.com/ru/ или ru.mysite.com/. Перевод не машинный а через "нейронную сеть" Гугла, в связи с чем точность и корректность переводов значительно выше и практически сравнима с переводом от человека - переводчика. Соответственно это плюс для SEO, поисковики реально видят разноязычные версии сайта для конкретной аудитории. Переводы сохраняются и могут быть скорректированы - используется сеть доставки переводов. Полный функционал можно потестировать 15 дней, а дальше за денежку, по тарифу в зависимости от ваших потребностей.
  35. 1 point
    Дело в другом, в этой теме мне TopRaN помог разобраться с моей проблемой таким кодом: <!-- Скрываем Кадастровый номер и квартиру --> {elseif $data_item.name eq "apartment" && $data_shared.user_id.value!=$smarty.session.user_id} {elseif $data_item.name eq "cadastral_number" && $data_shared.user_id.value!=$smarty.session.user_id} <!-- Скрываем Кадастровый номер и квартиру --> Теперь кадастровый номер и номер квартиры виден только автору обьявления, а админу не виден. В панели управления видимость стоит для групп "Админ" и "Агенты". Для чего это было сделано - Агенты не должны видеть чужие (других агентов) кадастровые номера.
  36. 1 point
    \apps\system\lib\system\user\account.php function getTopMenu () { $rs = '<br><a href="'.SITEBILL_MAIN_URL.'/account/balance/?do=add_bill">Пополнить счет</a><br>'; $rs .= '<br><i>* '.sprintf(Multilanguage::_('AD_PLACEMENT_COST','system'),$this->getConfigValue('advert_cost'), $this->getConfigValue('ue_name')).'</i>'; return $rs; }
  37. 1 point
    Форма баланса пользователя тут /apps/system/lib/system/user/account.php function main () { .... Файлы биллинга тут /apps/billing/ Но при обновлении ваши изменения будут стерты.
  38. 1 point
    Это у нас прямо в коде тут \apps\system\lib\system\user\data\user_data.php function getTopMenu()
  39. 1 point
    В /template/frontend/ваш_шаблон/main/main.php private function getNewest(){ require_once SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/grid/grid_constructor.php'; $grid_constructor = new Grid_Constructor(); $params['order'] = 'date_added'; $params['asc'] = 'desc'; $params['page_limit']=3; $params['page']=1; $res = $grid_constructor->get_sitebill_adv_ext( $params, false, false ); //echo count($res); //print_r($res); $this->template->assign('new_grid_items', $res); } $params['page_limit']=3;// сколько выводить новых
  40. 1 point
    /template/frontend/realia/standart_search_form.tpl Напишите вместо {$L_TYPE} свое слово "раздел объявлений"
  41. 1 point
    Елена, это вылазит меню ЛК, оно будет появляться только у тебя, когда авторизуешься в админке. В принципе, можно убрать содержимое user_menu.tpl, или убрать из main.tpl вот этот кусок: <div class="account pull-right"> <ul class="nav nav-pills"> {if $smarty.session.user_id eq ''} <li><a href="#" data-toggle="modal" data-target="#prettyLogin">{$L_LOGIN_BUTTON}</a></li> <li><a href="#" data-toggle="modal" data-target="#prettyLogin">{$L_AUTH_REGISTRATION}</a></li> {else} {if isset($user_menu)}{$user_menu}{/if} <li><a href="{$estate_folder}/logout/" >{$L_LOGOUT_BUTTON}</a></li> {/if} </ul> </div> который выводит кнопки и меню ЛК и кнопку "выход", если авторизован. Как я понимаю, часть из этого кода ты уже удалила а кусок остался.
  42. 1 point
    abushyk

    Выгрузка Yandex.Realty

    Если брать смый общий случай, то я иногда делаю в шаблоне вот так:{if $some_phone_number != '' && $some_phone_number|strlen==12}{$some_phone_number|regex_replace:'/(\d{3,3})(\d{2,2})(\d{3,3})(\d{2,2})(\d{2,2})$/':'+${1} (${2}) ${3}-${4}-${5}'}{/if}Самая примитивная регулярка которая раздирает исходных набор цифр на куски и форматирует из кусочков нужное отображение. Для mobilephone, которые однотипны и имеют равную длину и числовую составляющую, работает на ура. Для прочих номеров возможно больше вариантов из-за необходимости очистки исходного номера от мусора и разной длины номеров из-за свободной формы записи.
  43. 1 point
    Мимо. Это вы выковырнули блок агента, который разместил объявление. Блок списка агентов гнездится в файле /template/frontend/realia/agents_list.tpl Если его нужно переместить окончательно, что бі он нигде больше не выводился кроме как на главной, то можно взять его и вставить в /template/frontend/realia/main.tpl внутрь условия {if $REQUESTURIPATH == '' } ... {/if} или в центральную часть в /template/frontend/realia/layout_basic.tpl в виде {include file="agents_list.tpl"} При этом нужно будет удалить все включения этого блока в остальных файлах. И, скорее всего понадобится правка стилей, так как этот блок рассчитан на вывод в вертикальную узкую колонку. Если же его нужно продублировать, тогда лучше сделать отдельный файл под то место, где он будет стоять и аналогично описанному выше вставить его в нужный шаблон
  44. 1 point
    Смотря что править, если код, то это в mail.tpl, этот кусок кода: <div class="bottom-wrapper"> <div class="bottom container"> <div class="bottom-inner row"> <div class="item span4"> <div class="address decoration"></div> <h2><a>{$LT_ADD_YOUR_OWN}</a></h2> <p>{$LT_ADD_YOUR_OWN_DESC}</p> <a href="{$estate_folder}/add/" class="btn btn-primary">{$LT_VIEW_DETAILS}</a> </div> <div class="item span4"> <div class="gps decoration"></div> <h2><a>{$LT_RENT_FLAT}</a></h2> <p>{$LT_RENT_FLAT_DESC}</p> <a href="{$estate_folder}/getrent/" class="btn btn-primary">{$LT_VIEW_DETAILS}</a> </div> <div class="item span4"> <div class="key decoration"></div> <h2><a>{$LT_MORTGAGES}</a></h2> <p>{$LT_MORTGAGES_DESC}</p> <a href="https://unicom24.ru/ipoteka_iframe/?key=psrgeownkatwkimeumbjrrfotnbzxjkc" class="btn btn-primary" target="_blank">{$LT_VIEW_DETAILS}</a> </div> </div> </div> </div>а если текст, то надо лезть в словарь шаблона Realia (//template/frontend/realia/language/ru/dictionary.ini) и править системные фразы LT_ADD_YOUR_OWN - заголовок Продать LT_ADD_YOUR_OWN_DESC - описание LT_RENT_FLAT - заголовок Аренда LT_RENT_FLAT_DESC - описание LT_MORTGAGES_DESC - заголовок Ипотека LT_MORTGAGES_DESC - описание
  45. 1 point
    TopRaN

    Допиливаем новые фишки в realia

    А как вы хотели, вы на этом деньги заработаете, мы тоже кушать хотим. Да и некоторые функции, которые вы хотите, нужно писать.
  46. 1 point
    Итак, если у нас осталось место в навигаторе где изначально выводятся разделы структуры, у нас может возникнуть желание добавить туда что-то от себя. Для формирования этого блока служит функция шаблона реалия getTemplateMenu, которая пользуется услугами декоратора меню. Логи этого декоратора довольно сложна, именно поэтому мы не стали выдавать его в виде шаблона, а свели до $navmenu. Суть задачи - позволить нехитрым набором опций сообщать декоратору меню, что у куда вставить нам в нашу менюху. Я предусмотрел вставку двух типов: 1) вставка простой ссылки 2) вставка блока с выпадающими подпунктами, которые формируются на базе одного из меню из раздела Контент - Меню. А) Для начала улучшим функцию getTemplateMenu. Находим ее в /template/frontend/realia/main/main.php и заменяем на http://pastebin.com/NpibVwer Главное отличие, что она теперь умеет понимать переданные нами параметры и пытается кешировать в сессию некоторые данные. Т.е. если вы укажете ей строить дополнительный пункт на базе какой-то менюшки, то она не будет на всех переходах требовать его от бд, а возьмет один раз и запомнит на всю вашу сессию. Б) Параметры функции. Что бы указать чем и где дополнить нам меню нужно указать функции параметры. Параметры указываются в виде массива $menues=array( array( 'id'=>25, /*ID меню из Контент - Меню. Если указать ID не существующего в данный момент Меню, то получится просто пункт с меню, без выпадающего блока, тогда данный пункт даже не буде. Если нужно навставлять ссылок, то просто ставьте там 10000 и дальше*/ 'title'=>'О нас', /*Выводимая надпись на пункте*/ 'position'=>'behind',/*Расположение относительно пунктов Структуры. Если не указано или не behind, то after - в конце*/ 'href'=>'/somelink/'/*Ccылка на корневом пункте. Если не указать, то будет якорь (#), те неактивная ссылка чисто для группировки*/ ), array('id'=>23,'title'=>'О вас','position'=>'after','href'=>'http://dadada.ru')); Например, нам нужно поставить в верхнее меню следующее: - в самом начале ссылку на главную - после нее ссылку на отзывы /review - в конце подключить выпадающий список из Меню - Полезная информация с ид в БД 215. Сотв. наша конфигурация буде иметь вид $menues=array(array('id'=>0, /*0-хитрое значение. Оно может быть только в одном пунке и на него автоматом ставится ссылка на корень сайта*/ 'title'=>'Главная','position'=>'behind'),array('id'=>1000, /*поставили 1000 так как такого пункта у нас в меню нет*/ 'title'=>'Отзывы','position'=>'behind','href'=>'review'),array('id'=>215, /*а такое меню есть и мы его запросили*/ 'title'=>'Полезно','position'=>'after')); В) Как это все включить. В файле /template/frontend/realia/main/main.php находим вызов $this->template->assert('navmenu', $this->getTemplateMenu()); И меняем его на $menues=array(array('id'=>0,'title'=>'Главная','position'=>'behind'), array('id'=>1000,'title'=>'Отзывы','position'=>'behind','href'=>'review'), array('id'=>215,'title'=>'Полезно','position'=>'after')); /*наш набор пунктов*/ $this->template->assert('navmenu', $this->getTemplateMenu($menues)); /*тут мы его передали в декоратор*/ В результате получаем
  47. 1 point
    abushyk

    маяки на карте

    /apps/system/js/realtymap.js 1. Находим this.setDefaultIconSize=function(size){this.markersVariants._default.size=size;};добавляем после нее this.setDefaultIconOffset=function(offset){this.markersVariants._default.offset=offset;}; 2. Далее находим initJSON: function(el, datalisting, type, options){ ... if(options.marker_size !== undefined){ self.setDefaultIconSize(options.marker_size); } ...}После if(options.marker_size !== undefined){...} добавляем if(options.marker_offset !== undefined){self.setDefaultIconOffset(options.marker_offset);}3. Там где мы передавали параметры кастомного маркера RM.initJSON('map', loc_objects, map_type, {marker_icon: estate_folder+'/template/frontend/realia/img/my_marker.png', marker_size: [15, 20], yandexMapType: 'yandex#map' });добавляем еще один параметр - оффсет нашего маркера marker_offset: [-7, -20] (смещение "ножки" или точки указания маркера относительно верхнего левого угла картинки). RM.initJSON('map', loc_objects, map_type, {marker_icon: estate_folder+'/template/frontend/realia/img/my_marker.png', marker_size: [15, 20], yandexMapType: 'yandex#map', marker_offset: [-7, -20] });Обычно, для маркеров у которых "ножка" по центру нижней грани картинки, это половина ширины картинки и высота картинки со знаками минус.
  48. 1 point
    abushyk

    маяки на карте

    В realty_grid.tpl есть кусочек запуска карты $(document).ready(function(){var RM=new RealtyMap();RM.initJSON('map', loc_objects, map_type);});Рисуем свою иконку в нужный размер. Грузим ее в шаблон в папку с картинками, например в /template/frontend/realia/img/my_marker.png Делаем загрузку маркера дополнив существующую строку RM.initJSON('map', loc_objects, map_type, {marker_icon: estate_folder+'/template/frontend/realia/img/my_marker.png', marker_size: [42, 57]});вместо [42, 57] указываем размеры нового маркера в пикселях [ширина, высота] Аналогично можно поступить в любом шаблоне, где есть запуск карты через интерфейс var RM=new RealtyMap();
  49. 1 point
    Код генерации title тут /apps/system/lib/frontend/view/kvartira_view.php protected function getMetaData($form_data, $hasTlocation=false, $tlocationElement=''){ require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php'); $Structure_Manager = new Structure_Manager(); $category_structure = $Structure_Manager->loadCategoryStructure(); $title=''; $meta_title=''; $meta_description=''; $meta_keywords=''; $params['topic_id']= $form_data['topic_id']['value']; $title_parts=array(); if($hasTlocation){ $title_parts[]=$this->get_category_breadcrumbs_string( $params, $category_structure, SITEBILL_MAIN_URL.'/' ); if($form_data[$tlocationElement]['tlocation_string']!=''){ $title_parts[]=$form_data[$tlocationElement]['tlocation_string']; } if(0!=(int)$form_data['price']['value']){ $title_parts[]=number_format($form_data['price']['value'],0,',',' '); } if(!empty($title_parts)){ $title=implode(', ', $title_parts); } }else{ $title_parts[]=$this->get_category_breadcrumbs_string( $params, $category_structure, SITEBILL_MAIN_URL.'/' ); if($form_data['city_id']['value_string']!=''){ $title_parts[]=$form_data['city_id']['value_string']; } if($form_data['street_id']['value_string']!=''){ $title_parts[]=$form_data['street_id']['value_string']; } if(0!=(int)$form_data['price']['value']){ $title_parts[]=number_format($form_data['price']['value'],0,',',' '); } if(!empty($title_parts)){ $title=implode(', ', $title_parts); } } if($form_data['meta_title']['value']==''){ $meta_title=$title; }else{ $meta_title=$form_data['meta_title']['value']; } if($form_data['meta_description']['value']!=''){ $meta_description=$form_data['meta_description']['value']; } if($form_data['meta_keywords']['value']!=''){ $meta_keywords=$form_data['meta_keywords']['value']; } return array( 'title'=>$title, 'meta_title'=>$meta_title, 'meta_description'=>$meta_description, 'meta_keywords'=>$meta_keywords ); }
  50. 1 point
    Продолжаю отдельными постами, так как исчерпал лимит на картинки в одном сообщении )) 4.1. Секции. Не буду давать расширенного описания, скажу только, что все идентично как для корпусов. Таблица csection и поля csection_id, name, ckorps_id (по таблице ckorps) В принципе для секций можно было бы установить двойную зависимость - указывать принадлежность секции к корпусу и к ЖК. Для некоторых случаев это оправдано (особенено если делается полноценное приложение), но в нашем случае, когда необходимо лишь поразграничивать принадлежности и сам корпус и ЖК будет указан в свойствах недвижимости, такая связка будет избыточной. В итоге 5. Внедрение в недвижимость Сущности у нас готовы, можно приступать к привязке их на объявление. Нам необходимо добавить три свойства в нашу таблицу data - ЖК, Корпус и Секция. Все они будут добавляться полями типа select_by_query, что бы мы могли сформировать их списки в элементах выбора из соответствующих таблиц. Носить имена будут эти элементы czhilcom_id, ckorps_id и csection_id Если теперь мы перейдем в форму добавления объявления мы увидим, что наши новые три поля уютно прописались в форме в виде привычных списков выбора. Но если их поразворачивать, то вы увидите, что они вмещают все варианты из своих таблиц и не реагируют на состояние "родительского" элемента. Например выбор ЖК никак не отражается на содержимом списка корпусов. Приступаем к наладке связей. 6. Связывание Основой для связывания служит принцип связанных элементов формы - http://wiki.sitebill.ru/index.php?title=%D0%A1%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B Нам необходимо в рамках одной формы указать элементам на какие другие элементы они влияют в форме и от каких зависят. Например - ЖК. От состояния этого элемента зависит возможный список выбора в элементе Корпуса. Эта зависимость описывается какЭто значит, что элемент, в котором мы выбираем название ЖК связан с элементом с системным именем ckorps_id (элемент выбора Корпуса ЖК), а ключем, который внутри Корпуса соответствует жилому корпусу является значение из поля czhilcom_id модели Корпуса. Если взлянете выше, то это значение в модели Корпуса у нас является идентификатором ЖК, к которому привязан Корпус.Больше ЖК у нас ни на что не влияет, потому и других параметров нет. Далее Корпус. Корпус, аналогично ЖК влияет на "следующий" элемент - Секцию. Но, кроме этого, он еще должен знать от какого элемента зависит сам - это необходимо для формирования адекватного списка значений элемента Корпус, но не тогда, когда сделан выбор конкретного ЖК, а при загрузке формы. Например, если вы открыли на редактирование объявление в котором ЖК был указан как Элитный, тогда в списке Корпусов вполне ожидаемо окажется уже готовый список корпусо ЖК Элитный. linked - описывает зависмость когда элемент влияет на что-то.depended - когда что-то влияет на элемент И, наконец, Секция. Самый простой элемент. Он ни на что не влияет, но на него влияет Корпус. Что и видно из параметров. Нет ничего страшного, если вы ничего не поняли про связи с первого раза. Это нормально, Я гарантирую это. Если теперь вы попробуете загрузить форму добавления объявления, вы видите, что у вас доступен на выбор только элемент ЖК, а остальные будут подгружены только после выбора соответствующего родительского. Для того, что бы увидеть этот эффект в Настройках необходимо включить параметр Настройки - Дополнительно - Off system Ajax 7. Эпилог Ай, у меня не работают элементы выбора географии. Что делать?... Тут все ожидаемо. Изначально принцип связанных элементов предназначался как-раз для географических элементов, что бы вывести из кода движка жесткие зависимости Страна-Регион-Город-Район\Улица и иметь более широкую возможность настройки своих связей. А так же, иметь возможность введения промежуточных элементов (Страна-Регион-Субрегион-Город), которые разрывали бы существующие связи, заложенные в код Сайтбилля. Именно поэтому опция Off system Ajax отрубает всю систему заложенных связей. Возможно это слишком кардинально и стоило бы предусмотреть ступенчатую систему, когда подключение пользовательских связанных элементов регулировалось бы одной настройкой, а отключение привычной связки от Страны к Улице другой. На данный момент четкого мнения у меня пока нет. Для себя я решил эту проблему навеской связей на географические элементы в виде, аналогичном системным правилам. Т.е.country_idlinked region_id,country_id region_idlinked city_id,region_iddepended country_id city_idlinked street_id,city_id;district_id,city_iddepended region_id district_idlinked mkrn_id,district_iddepended city_id street_iddepended city_id mkrn_iddepended district_id 8. Offtop С другой стороны, даже этот способ немного избыточен. Если Город является дочерним к Региону, а Регион к Стране, то хранение всех трех значений для объявления - это "лишние" данные, хотя при организации поиска они весьма кстати. Суть в том, что географические данные вполне возможно хранить в виде, схожем со структурой и получать к ним доступ более "человечным" путемНо в этом случае остается так же много вопросов связанных с совместимостью с многими приложениями, принципом организации смой геоструктуры (ведь если заструктурить географию от страны до улиц - это может стать неподъемным грузом, а если закончить городом, то не совсем понятно, как вести связь дальше к улицам, которые должны таки быть привязаны к городам или чему-то наследному от них). В общем идея у нас полно, была бы возможность все реализовать)