Leaderboard
Popular Content
Showing content with the highest reputation since 06/14/13 in Сообщения
-
6 points
Шаги по оптимизации SEO для CMS Sitebill
kmavega and 5 others reacted to metrpro for сообщение в теме
Добавлю несколько слов от себя: 1. Используйте seo-возможности страниц с объявлениями. Если нет возможности заполнять мета-титл для каждого объявления, генерируйте их. Откажитесь от стандартного h1, определяемого переменной $title - лучше компонуйте его на уровне шаблона _view из переменных массива data, таких как: {$data.city_id.value_string} - название города; {$data.street_id.value_string} - название улицы; {$data.number.value} - номер дома; {$data_shared.price.value} - цена; {$data.text.value} - текстовое описание (укорачивайте его функцией truncate) Помните, что согласно статистике google, 15% ежедневных поисковых запросов уникальны, они никогда больше не повторятся, поэтому 100-1000-10000 объявлений с качественными заголовками meta-title, h1-title, meta-description дадут большой пласт НЧ-запросов. 2. На любом сайте объявлений самое ценное - это страницы листингов (_grid). Используйте Линк-менеджер, чтобы добавить геотаргетированные списки объявлений, таких как "Продажа 1-комнатных в Ялте" или "Аренда домов в Ялте посуточно". Это поможет охватить большой сегмент СЧ-запросов. У меня на сайте разделов predefindlinks - более 300шт и их количество я продолжаю ежедневно увеличивать. 3. Регулярно проверяйте наличие дублей страниц через Google Webmaster. 4. Закройте в robots.txt все параметры, кроме page, которые не умеете использовать, а именно price, order, grid_type, city_id, street_id. 5. По недвижимости всегда полно запросов типа "Город, Улица" - попробуйте использовать city_id и street_id в комбинации, чтобы создать огромное количество гео-листингов по НЧ-запросам. У меня любой поиск через стандартную форму sitebill формата "город такой-то, улица такая-то" выдаст листинг с заголовками типа "СЕВАСТОПОЛЬ, Октябрьской Революции проспект - объявления по продаже и аренде квартир, домов, недвижимости недорого без посредников". Вот пример очень даже неплохих ПФ при заходе на подобную генерированную страницу: 6. Генерируйте alt и title для всех изображений как на страницах объявлений, так и на страницах листингов. Используйте для этого те же переменные, что и в п. 1, добавляя уникальность переменной {$smarty.section.j.index} (для шаблона _view). 7. Никогда не удаляйте объявления. Не делайте их неактивными. Используйте для этого дополнительную переменную и оперируйте ею на уровне шаблона, чтобы не потерять посетителя. Тогда объявление будет участвовать в поиске и в листингах, а пользователь не попадет на 404. 8. Улучшайте ПФ простым образом - помните, что не все пользователи будут кликать на ниспадающее меню (как в realia или estatico), половина из них будет искать привычные быстрые ссылки, к которым они привыкли на авито. 9. Пропишите 404 с ссылками на основные разделы сайта. 10. Прочитайте великолепный мануал Саши Алаева про продвижение сайта объявлений недвижимости - он от 2014 года, но всё, что там написано, сверхактуально. 11. Поставьте на сайт поиск от Яндекса или Google. 12. Будьте аккуратнее со штатным seo-приложением sitebill. Не включайте .html, не используйте сложных структур uri (особенно, если у вас объявления могут добавлять зарегистрированные пользователи, которые имеют обыкновение путать категорию). 13. Каждую новую страницу листинга, где вы исправили заголовки или описание, добавляйте вручную в Я и G. UPDATE 28-09-16: 14. Не пожалейте часа времени и посмотрите видео "SEO для сайтов по продаже и аренде недвижимости". Его автор - Руководитель департамента продаж SeoPult Евгений Костин, и рассказывает он занятнейшие вещи. Работы по тому, что я тут написал, у себя начал в 20 числах августа (т.е. около месяца назад). Результат не в абсолютном выражении, а в относительном, меня радует - рост трафика составил более чем в 2 раза: Указаны среднесуточные переходы из ПС. Спад в текущей неделе связан с тем, что сегодня еще вторник. У меня всё, можете начинать срач. -
6 pointsДобрый день! Сразу же хочется поблагодарить разработчиков CMS Sitebill за столь гибкую и хорошую CMS для агентств недвижимости, а также за адекватную, полезную помощь и поддержку! У нашей студии большой опыт работы с проектами для недвижимости, и даже есть собственная CMS заточенная под эту область, но Sitebill в последнем проекте показал свои сильные стороны. Хочется рассказать о нашем новом проекте - сайте агентства недвижимости "Академия м2" http://www.akademiyametrov.ru, и особенно о тех модулях и нововведениях, которые мы использовали для Sitebill при работе над ним, потому как считаем, что они будут полезны всему сообществу: ------------------------------------------ 0. Сайт сверстан на Twitter Bootstrap 3. Пока мы не видели новых проектов на Sitebill с этим css-фреймворком. Верстка велась на основе шаблона agency. В целом, подключение CSS и JS Bootstrap 3 не вызвало больших проблем. 1. Написали свой модуль краткой Заявки в свободной форме! По-умолчанию, в CMS сделана большая, громоздкая форма заявки на аренду и покупку недвижимости. Мы же, по своему опыту знаем, что форма должна иметь как можно меньше полей для заполнения посетителем - конверсия выше будет. Модуль сделан в виде одного php-скрипта (дочитайте до конца и узнаете как его получить!). Данные отправляются на почту и появляются у админа в разделе "Заявки на аренду". Поэтому была написана форма всего с 4 полями, которая выводится в модальном окне bootstrap 3. Отправка данных сделана через ajax в наш скрипт simple-order.php. А в скрипте просто заносится данные в таблицу: $query="INSERT INTO re_data_get_rentSET name='".$name."', phone='".$phone."', more='".$message." (".NOW.")', date_added='".TIMESTAMP."'";2. Слайдер. Слайдер - это краеугольный камень презентационных сайтов, к коим относятся и сайты по недвижимости. Слайдер на главной странице сделан на основе верстки модуля/шаблона right_special.tpl и подключен к js-библитеке Sly slider. Доработки: - корректная обрезка описания объекта, с помощью функции шаблонизатора Smarty - truncate:200 \template\frontend\akademiyametrov\right_special.tpl:14 <p>{$special_items2[i].text|strip_tags|truncate:200}</p>- Вывод нескольких фото в слайдер (по-умолчанию, в CMS выводится одно фото) - подсказали в теме http://www.etown.ru/s/topic/357-превью-в-модуле-спецпредложений/: Файл /apps/system/lib/frontend/grid/grid_constructor.php:838:1551:2251 $image_array = $data_model->get_image_array ( 'data', 'data', 'id', $item_array['id'], 1 );тут убираем последний аргумент, который и указывает на количество фото $image_array = $data_model->get_image_array ( 'data', 'data', 'id', $item_array['id']);3. Существенно переработана форма поиска: оставлены только необходимые поля. Плюс, сделано так, чтобы по-умолчанию был выбран необходимый город (с помощью jQuery): $('select#city_id :nth-child(2)').attr("selected", "selected");Для стилизации полей формы использовали jquery.formstyler.min.js (по-моему, его можно включить в дефолтные шаблоны CMS). 4. Таблица объектов также существенно переработана: - выводится три фото (вместо одного): {if $grid_items[i].img[1] != '' } <a class="preview" href="{$grid_items[i].href}"><img src="{$estate_folder}/img/data/{$grid_items[i].img[1].preview}" width="50"></a> {/if}{if $grid_items[i].img[2] != '' } <a class="preview" href="{$grid_items[i].href}"><img src="{$estate_folder}/img/data/{$grid_items[i].img[2].preview}" width="50"></a> {/if}- если указана сортировка по какому-то столбцу (стоимость, район и др.), он выделяется серым цветом css-класса cell-1: class="{if strpos($smarty.server.REQUEST_URI, "order=type") == true}cell-1{/if}- проставлены относительные даты добавления объекта вместо абсолютных ("сегодня", "вчера" вместо дефолтных "11.12"). Использована функция Smarty $smarty.now|date_format:"%d.%m" : {if $grid_items[i].date==$smarty.now|date_format:"%d.%m"} сегодня{elseif $grid_items[i].date==($smarty.now-(60*60*24))|date_format:"%d.%m"} вчера{else} {$grid_items[i].date}{/if}- благодаря новым классам в Bootstrap 3 некоторые столбцы на мобильных устройствах скрываются и таблица становится компактной и помещается на экранах вплоть до планшетов: <td ... class="visible-lg">...</td>5. Существенно переработана страница объекта - к примеру, вот продажа 1-к квартиры. - Фото выводятся с помощью библиотеки photosetGrid , которая в виде мозаики размещает их. - Форма отправки заявки на объект также сделана по-другому: некрасивое всплывающее окно с большим количеством полей мало кто будет заполнять, поэтому форма выводится тут же на странице и выглядит как два поля - "Имя" и "Телефон". И все! Отправка данных из нее реализована через ajax. Для этого пришлось скопировать дефолтный шаблон form.tpl в свой шаблон в папку \template\frontend\akademiyametrov\apps\mailbox\site\template\ , и таким образом, работать уже с собственным подключаемым шаблоном. Спасибо за подсказку в теме http://www.etown.ru/s/topic/331-отдельный-шаблон-новостей/ 6. Главную страницу тоже существенно переверстали. К примеру, на основе функций Smarty сделали так, чтобы кое-какие блоки верстки выводились только на главной странице (в примере ниже - это слайдер, который выводится только на главной): {if $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" eq '/'} <!-- Slider --> ... <!-- /.Slider -->{/if} или не выводились в определенных разделах (тут блок поиска не выводится на стат.страницах): {if $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/services/' && $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/aboutakademiyametrov/' && $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/contacts/' && $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/news/' && $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/rostovhistory/' && $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" ne '/order/'} <h2 class="topic"> Каталог недвижимости</h2>{/if}7. Для бекэнда тоже постарались: написали свой модуль для автоматического экспорта объектов на доску объявлений "Авито" - http://www.akademiyametrov.ru/xml/avito.xml, чем с удовольствием пользуется клиент, а также модуль автоматического парсинга определенных сайтов и добавления квартир с них в админку. Но, на текущий момент, первый модуль оформлен как кнопка со ссылкой на URL (по которому генерируется xml) в разделе "Выгрузка Яндекс.Недвижимость" и представляет собой один php-скрипт, т.к. до написания полноценного плагина для CMS руки не дошли. Вполне вероятно, что при работе над другими проектами оформим их как плагины. В итоге 1-месячной работы имеем: 2 новых собственных шаблона модулей (news, mailbox - все они копировались из дефолтных в папку \template\frontend\akademiyametrov\apps\ , к примеру собственный шаблон новостей для работы должен иметь путь \template\frontend\akademiyametrov\apps\news\site\template\), 8 переверстанных шаблонов (header.tpl, footer.tpl, main.tpl, right_special.tpl, standart_search_form.tpl, realty_view.tpl, realty_grid.tpl, news_list_column.tpl), 4-6 файлов собственных модулей ... и ~10 вопросов на форуме Готовы поделиться скриптом для формы свободной заявки (1 php-скрипт + js-код для отправки данных + код под bootstrap для верстки модальн.окна). Пишите в личку. При разработке даже сделали небольшой хак - "Установка шаблона из URL 'на лету' " http://www.etown.ru/s/topic/332-хак-установка-шаблона-из-url-на-лету/ И в конце работы над проектом, хочется высказать пожелания для разработчиков, быстрее включить в дефолтные шаблоны Bootstrap 3. ----------------- Отдаем даром форму краткой Заявки на объекты В ходе работы над последним проектом на основе Sitebill, мы сделали краткую форму Заявки на объект. Знаем по собственному опыту работы с сайтами агентств недвижимости - такая форма с 2-4 полями дает существенную конверсию и отдачу. Форма добавляет заявку в админку и отправляет заявку на email. Готовы поделиться скриптом для формы свободной заявки (1 php-скрипт + js-код для отправки данных + код под bootstrap для верстки модальн.окна). Просто напишите в личку.
-
5 points
Раскрутка сайта в Интернет
Dim42 and 4 others reacted to Chernetskiy for сообщение в теме
Полезные ссылки для вебмастера Ссылки, которые пригодятся и вам. Общее 1. Просмотр сайта в различных браузерах: http://browsershots.org/ Ресурс позволяет узнать, как ваш сайт видят пользователи в разных браузерах, в том числе позволяет оценить кроссбраузерную верстку сайта. 2. Конвертер punycode для .рф доменов: http://2ip.ru/punycode Позволяет получить адрес в punycode для вашего домена в зоне .рф. Или, проще говоря, ресурс позволяет превратить название www.ромашковый-рай.рф в абракадабру, которую понимают компьютеры: xn----7sbbg9accordri2hzb.xn--p1ai. 3. Декодер почты. Пришло письмо с нечитаемыми символами? Прочитать его можно тут: http://www.charset.ru/ 4. Назад в будущее: http://web.archive.org – ресурс позволяет посмотреть этапы изменения сайта. Не помните, когда меняли текст на сайте или просто интересно посмотреть, как выглядел ваш сайт в день его открытия? Ресурс для вас. Оптимизация сайта 5. Подбор ключевых слов, семантического ядра. Правильно подобрать ключевые слова для вашего сайта поможет сервис Wordstat от Яндекса. Как пользоваться этим сервисом читайте по ссылке: http://1ps.ru/help/word/ 6. Мета-теги title и description. Все знают, что эти теги важны для оптимизации и продвижения сайта. Как правильно прописать мета-теги title и description в примерах читайте по ссылке: http://1ps.ru/blog/seo/title-i-description-v-primerah/ 7. 301 редирект. Сменили доменное имя? До сих пор не настроили постоянное перенаправление с www на без www вашего сайта? 301-редирект вам в помощь. Как настроить редирект 301 хорошо написано на сайте: http://sb-money.ru/article.php?a=75 8. Карта сайта, sitemap. Создать карту сайта онлайн можно с помощью сервиса http://htmlweb.ru/analiz/sitemap.php . Заодно сервис анализирует ваш сайт и указывает на основные критические ошибки. 9. Новости SEO, все для оптимизатора: http://www.allseo.ru/news Хороший ресурс о новинках в области SEO. 10. Форумы по продвижению, оптимизации сайтов: http://seochase.com/ , http://forum.searchengines.ru/ Анализ сайта 11. Seo анализ сайта, сервис для оптимизатора: http://mainspy.ru/ - позволяет провести общий анализ сайта, определить тИЦ, PR, и еще много других параметров. 12. Анализ контента. http://pr-cy.ru/analysis_content – сервис позволяет определить вес главной страницы сайта, релевантность заголовка (title) и другое. 13. Определить CMS сайта. Сервис http://itrack.ru/whatcms/ - позволяет узнать, на какой CMS разработан ваш сайт. 14. Проверка сайта на вирусы. https://www.virustotal.com/ru/#url Help Яндекса 15. Служба поддержки Яндекса. Есть вопросы Яндексу? Пишите сюда, Платон ответит: http://feedback.yandex.ru/webmaster/ 16. О том, каким должен быть хороший сайт. Как сделать хороший сайт по мнению Яндекса, можно прочитать по ссылке: http://help.yandex.ru/webmaster/?id=1108938 17. О robots.txt. Использование robots.txt, что зачем и как узнайте по ссылке: http://help.yandex.ru/webmaster/?id=996567 18. Что такое зеркала сайтов, кому они нужны, как их настроить: http://help.yandex.ru/webmaster/?id=995297 19. Карта сайта (sitemap). Что такое карта сайта, для чего нужна, что обязательно нужно учесть при ее создании. http://help.yandex.ru/webmaster/?id=1007070 20. Рекомендации Яндекса по созданию сайтов: http://help.yandex.ru/webmaster/?id=1108938 21. Коды региональной выдачи: http://search.yaca.yandex.ru/geo.c2n Сервис позволяет узнать, как выглядит выдача в другом регионе. Например, вы ищите «пластиковые окна» и хотите увидеть результаты поиска для Москвы, достаточно поменять параметр &lr в адресной строки на &lr=213. Будет показана выдача Москвы. 22. Правила размещения рекламы на Яндексе: http://advertising.yandex.ru/requirement/media/regulations.xml?ncrnd=7571 На данной странице перечислены основные ограничения и требования к рекламе в Интернете. -
5 points
Улыбнуло
SergeiMashkin and 4 others reacted to abushyk for сообщение в теме
Были вчера на "празднике шоколада". Кроме всякой сладкой вкусно-всячины попалось и такое и что самое интересное - шоколадные гайки таки скручивались с шоколадных болтов)) -
5 points
Шаблон DOMIKUS
TopRaN and 4 others reacted to vetalysd for сообщение в теме
Предлагаю вашему вниманию шаблон DOMIKUS 2.0. ДЕМО http://demo1.orangeee.net/ логин: admin пароль: admin Описание http://orangeee.net/новый-шаблон-domikus-2-0-для-cms-sitebill/ Стоимость шаблона: 2900 р. спешите! скоро много обновлений! ПРИОБРЕСТИ МОЖНО ТУТ http://www.sitebill.ru/shablon-domikus или пишите в личку Шаблон подойдет не только современным доскам объявлений , но и классическим агенствам недвижимости.Пример реализации в строгом стиле ===>> Bootstrap 3.3.2 Jquery 2.1.3 JqueryUI 1.11.4 Glyphicons и Font awesome - В картах GOOGLE используеться векторный маркер SVG - Минимум кода СSS около 15кб. -Используються максимально стили BOOTSTRAP и встроенный функционал. -Слайдеры и карусели BOOTSTRAP -Табы Jquery UI заменены на Бутстраповские. -Litebox заменен на Сolorbox и скомбинирован для удобства с каруселью. -Улучшен интерфейс (чекбоксы, селекты, кнопки) -Все функции последнего стандартного шаблона сохранены на 100%. Уникальные особенности: 1. Вывод Слайдера с special_adver_cost (специальными предложениями) вместо случайного объявления (заменяет объявление). 2. Вывод в виде иконок наличия бытовой техники и услуг: "кондиционер", "стиральная машина", "интернет" и т.д. 3. Кнопки быстрого поднятия,удаления,редактирования и т.д. прямо из REALTY_GREED (сетки обявлений) и карточки объявления. 4. Поднятие объявления администратором из фронтальной части. 5. Поле "контакты хозяина" доступное из фронтальной части автору объявления и администратору. 6. Быстрый просмотр фото из REALTY_GREED (сетки обявлений). 7. Список агентов с AJAX JSON подгрузкой..+счетчик обявлений у пользователей. 5.Некоторые функции в разработке.Некоторые добавим по вашему желанию. ФОТО -
4 points
[Песочница] Пользовательские сущности и Связанные элементы
metrpro and 3 others reacted to abushyk for сообщение в теме
1. Предистория Допустим мы имеем базовый сайт на сайтбилле. У нас есть стандартная модель квартиры-недвижимости со всякими Цена, Площадь и прочими свойствами по вкусу. И вот, в один прекрасный момент, мы решили заняться торговлей квартирами в новостройках. А новостройки эти у нас зачастую представлены не отдельными зданиями, а целыми комплексами зданий, которые в свою очередь разбиты на секции. 2. Анализ. Сначала разберемся со структурой. Самый простой вариант - мы решили еализовывать каждую квартиру в виде отдельного объекта. Например, если в ЖК "Элитный" у нас есть корпус А, а в нем секция I и в этой секции, грубо говоря, 15 квартир одной планировки, но некоторые на разных этажах, мы будем считать, что каждая квартира, даже одинаковой планировки - является одним объектом. Иными словами, мы не делаем группировок по типам, а ведем каждую квартиру отдельно. Это дает нам некоторую гибкость, так как квартиры на крайних этажах могут иметь меньшую цену в отличии от одноплановых с ними, на остальных этажах. Так же, из плюсов то, что мы можем задать какие-то особенности поквартирно, даже не смотря на то, что они одноплановые. Особенно это касается, когда квартиры продаются не в сыром виде, а меблированные или с финишной отделкой. Либо учесть иные особенности каждой квартиры. Из минусов такого подхода то, что если секция у нас 9-ти этажная с 4 квартирами на этаж, то на секцию получается 36 объектов. И дальше в геометрической прогрессии в зависимости от количества секций в корпусе и корпусов в ЖК. Соответственно, логично предположить, что кроме обычных для недвижимости параметров (цена, площадь, этаж,и т.д.) нам придется снабдить модель недвижимости дополнительными параметрами, устанавливающими ее привязку к конкретному положению в разрезе ЖК - конкретный ЖК, корпус ЖК, секция корпуса ЖК. И так же очевидно, что при заполнении формы эти параметры должны бы быть связаны цепочкой, как то при выборе отдельного ЖК, мы должны получить под выбор список корпусов только этого ЖК, что бы не рыскать в длиннющем списке всех корпусов. Аналогино и с секциями. 3. Инструментарий. Для реализации нам понадобятся свежие приложения system, admin, table, customentity. Привлекать готовые приложения типа "Жилые комплексы" мы не будем. Из настроек нам будет необходимо включить параметр Настройки - Дополнительно - Off system Ajax. Данная опция выключает автоматические связки между зависимыми элементами и предоставляет нам полный контроль над определением своих зависимостей. Из почитать - 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 4. Подготовка дополнительных сущностей. Если мы должны иметь возможность выбрать корпус, ЖК и секцию, значит у нас где-то должны быть списки этих значений. В Сайтбилле, для организации списков значений существует два типа полей - select_box и selectbox_by_query. Первый нам не подходит, так как не поддерживает организацию наследия. Т.е. штатными средствами этого элемента мы можем задать набор его вариантов значений, но не можем указать какие-то связующие ключи с другим элементом. Второй, поскольку хранится в БД в виде отдельной таблицы, вполне на это способен. Но для его использования необходима соответствующая таблица в БД. В нашем случае таблиц будет три - таблица ЖК, таблица корпусов и секций корпусов. Что бы избавить себя от рутинной работы по наполнению этих данных через phpMyAdmin создадим соответствующие таблицы в Редакторе форм. 4.1. Жилые комплексы. Для ЖК - это таблица czhilkom с полями czhilcom_id (primary_key) и name (safe_string). Создав таблицу и наполнив ее элементами, нажимаем кнопку Создать таблицу. Теперь таблица ЖК существует физически в БД. Надо наполнить ее какими-то жилыми комплексами. Для того, что бы получить доступ к работе с этой сущность через стандартную админку, воспользуемся приложением Пользовательские сущности. Для начала проверим, что приложение установлено. Для этого в админке переходим по адресу /admin/index.php?action=customentity&do=install При переходе по нему, в случае отсутствия необходимых таблиц для работы приложения, они будут созданы. После этого возвращаемся в Редактор форм и в заголовке таблицы czhilkom ищем кнопку со завездочкой Эта кнопка отвечает за создание мини-обработчика для сущности, у которой нет штатного обработчика (в виде встроенного модуля или стандартного\стороннего приложения). NB. Попытка создать этой кнопкой обработчик для встроенных сущностей, как Город, Район или для тех у которых есть приложения - Баннеры, Новости - ни к чему не приведет. После нажатия кнопки Создания обработчика мы увидим следующее окно где в поле Название вам нужно ввести вменяемое название для вашего обработчика, что бы вы знали к чему он относится. Введем например Жилой комплекс и нажмем Создать. После перезагрузки страницы в верху, возле кнопки раскрытия списка приложений мы получим дополнительную кнопку Пользовательские, а под ней и наше квази приложение Жилой комплекс Если перейти по предложенной ссылке, вы получите минималистический инструмент для управления вашими ЖК где вы можете добавить ЖК в список, изменить существующий или удалить ненужный. Приложение не следит за целостностью, т.е. если вы удаляете ЖК, то об удалении соответствующих зависимых корпусов и секций вам так же придется позаботиться самому. Не надейтесь на возможность реализации таким способом каких-то "творческих вывихов" - это исключительно инструмент для обеспечения удобства. Для полноценной работы с такими сущностями, как разделение их по пользователям с возможностью редактирования последними, организация страницы, например конкретного ЖК, шаблонизация необходимо создавать полноценное приложение. Для наших целей добавим два ЖК - Элитный и Морской с помощью кнопки Добавить запись Процесс, как вы можете заметить, вполне привычный и не должен вызвать трудностей 4.1. Корпуса. Создание таблицы корпусов абсолютно ничем не отличается от создания таблицы ЖК кроме того, что у корпусов есть зависимость от ЖК. Например ЖК Элитный имеет два корпуса - Корпус А и Корпус Б. Тогда модель корпуса (ckorps) будет состоять из полей Поле czhilcom_id является обычным полем селектбокса подбирающим данныеиз внешней таблицы, в данном случае из таблицы czhilcom Простыня под спойлером Дальше все по алгоритму - создали таблицу в Редакторе форм, наполнили полями, создали физическую таблицу, зарегистрировали обработчик. Из Пользовательских переходим в Корпуса добавляем Названия сущностей рекомендую давать расширенные - с включением родительского описания. Так как обработчик весьма прост, то особых способов отличить Корпус А от ЖК Элитный и Корпус А от ЖК Морской у вас не будет. В результате мы получаем нечто похожее на -
4 points
Переменные в main.php
metrpro and 3 others reacted to mmkulikov for сообщение в теме
Если администрация не против - предлагаю здесь собирать информацию о доступных переменных для шаблона. Переменные: Просмотреть содержимое любого массива, например, {$special_items2|@print_r} $estate_folder - корневая папка сайта $current_theme_name - имя используемой темы $smarty.session.user_id - если пусто, значит пользователь не залогинен. Лучше проверять как {if intval($smarty.session.user_id)!=0}Значит авторизирован{/if} $main_file_tpl - имя подгружаемого файла шаблона для отображения, например, realty_grid.tpl - шаблон вывода списка категории недвижимости $main - в отличии от предыдущего - это готовый контент для вывода (готовится в контроллере или приложении) $special_items2 - массив, содержащий список спецпредложений(VIP) $grid_items - массив обычных объявлений $news_list_column - массив списка новостей $apps_page_view - если переменная определена, значит идет просмотр статической страницы $meta_keywords - keywords $meta_description - description $breadcrumbs - "хлебные крошки" $map_type - google, yandex $is_account - указывает на то, что мы сейчас в личном кабинете (1/0) $_layout - текущий макет, по умолчанию (как правило) layout_basic.tpl (используется, например, в main.tpl для подгрузки основного файла шаблона) -
4 points
Панорама
Johnny Bravo and 3 others reacted to abushyk for сообщение в теме
Для гугля 1. Блок под панку <div id="panoview" style="width:100%;height:300px;"></div> 2. Коры для точки панорамы {if $data.geo.value.lat!='' && $data.geo.value.lng!=''} <script> var pobj_lat={$data.geo.value.lat}; var pobj_lng={$data.geo.value.lng}; </script> {else} <script> var pobj_lat=''; var pobj_lng=''; </script> {/if} 3. Скрипт запуска панорамки {literal} <script> /*объект-обработчик*/ var PanoRunner={}; PanoRunner.panorama=null; PanoRunner.initialize=function(pobj_lat, pobj_lng) { var panoposition = {lat: pobj_lat, lng: pobj_lng}; var sv = new google.maps.StreetViewService(); PanoRunner.panorama = new google.maps.StreetViewPanorama(document.getElementById('panoview')); sv.getPanorama({location: panoposition, radius: 50}, PanoRunner.processSVData); }; PanoRunner.processSVData=function(data, status){ if(status === google.maps.StreetViewStatus.OK){ PanoRunner.panorama.setPano(data.location.pano); PanoRunner.panorama.setPov({ heading: 270, pitch: 0 }); PanoRunner.panorama.setVisible(true); }else{ /*стирание блока под панорамку, если облом*/ $('#panoview').remove(); } } $(document).ready(function(){ if(pobj_lat!='' && pobj_lng!=''){ /*запуск подключателя панорамы*/ PanoRunner.initialize(pobj_lat, pobj_lng); }else{ /*стирание блока под панорамку, если координат нет*/ $('#panoview').remove(); } }); </script> {/literal} -
4 points
Благодарность!!!!!
Richardrap and 3 others reacted to Triser for сообщение в теме
Доброе время суток уважаемые форумчане!!!! не буду лукавить подкинули мне идею отличную. я Думаю что я не единственный человек здесь, кому помог Константин Abushyk. есть огромное желание отблагодарить этого великолепного человека, гуру нашего сайта)) Предлагаю Подарить ему подарок от всей души!!! Скидываемся кто сколько может так сказать)))) собираем финансы, переводим Константину, и он сам покупает что ему нужно. или покупаем подарок отправляем ему в город Львов, с просьбой потом отписаться о получение.. у кого какие мысли? думаю это будет правильно.. Спасибо всем кто меня поддерждит!!! -
4 pointsЕсли брать смый общий случай, то я иногда делаю в шаблоне вот так:{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, которые однотипны и имеют равную длину и числовую составляющую, работает на ура. Для прочих номеров возможно больше вариантов из-за необходимости очистки исходного номера от мусора и разной длины номеров из-за свободной формы записи.
-
4 points
Создание страниц стран, регионов - городов (predefinedlinks)
Realtor and 3 others reacted to abushyk for сообщение в теме
http://my.digitalwerkstatt.ru/files/predefinedlinks.zip Распаковываем в /apps/ Приложение появится в админке под именем Заходим в него. Запрашиваем адрес /admin/index.php?action=predefinedlinks&do=install, что бы установилась табличка в БД. Потом добавить запись: После этого при запросе /elites/ - вы должны получить желаемое. ПС. Приложение не особо популярное, так что если будут косяки, пишите. -
4 pointsПродолжаю отдельными постами, так как исчерпал лимит на картинки в одном сообщении )) 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 С другой стороны, даже этот способ немного избыточен. Если Город является дочерним к Региону, а Регион к Стране, то хранение всех трех значений для объявления - это "лишние" данные, хотя при организации поиска они весьма кстати. Суть в том, что географические данные вполне возможно хранить в виде, схожем со структурой и получать к ним доступ более "человечным" путемНо в этом случае остается так же много вопросов связанных с совместимостью с многими приложениями, принципом организации смой геоструктуры (ведь если заструктурить географию от страны до улиц - это может стать неподъемным грузом, а если закончить городом, то не совсем понятно, как вести связь дальше к улицам, которые должны таки быть привязаны к городам или чему-то наследному от них). В общем идея у нас полно, была бы возможность все реализовать)
-
4 points
Предложения для будущих версий.
Chernetskiy and 3 others reacted to Дмитрий Кондин for сообщение в теме
Думаю надо сделать отдельную ветку в форуме. Там будет каждая новая фича отдельным топиком. Если пользователю интересна эта фича, то он там пишет +1, в результате тема которая интересна большему количеству появится в новой версии. -
4 points
Перенос сайта на другой хостинг
domprim.ru and 3 others reacted to IGOR for сообщение в теме
Ваши dns регистрируются, скоро сайт будет доступен по обычному адресу.. p.s C каждым вопросом Вы создаете новую тему.........Создайте уже тему "Konstantin Nikolaevich" и пишите туда все свои вопросы.... не в обиду, но сколько же можно одновопросных тем создавать? вот такая-же тема, можно в неё написать http://www.etown.ru/s/topic/515-%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81-%D1%81%D0%B0%D0%B9%D1%82%D0%B0-%D0%BD%D0%B0-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3/ -
3 points
Приоритетные города в форме выбора (поиск или добавление)
Pavel88 and 2 others reacted to Дмитрий Кондин for сообщение в теме
Допустим у нас в базе есть 100 городов. Все они отсортированы по алфавиту. Но мы хотим чтобы город Москва всегда был на первом месте при выборе. Ведь это логично, что большинство объявлений будут базироваться там (для Москвы и Московской области это актуально). Для этого заходим в Приложения - Редактор форм. 1. Раскрываем поля таблицы city 2. Добавляем поле sort_order с типом safe_string, название даем "Порядок сортировки" (храниться в базе), сохраняем 3. Идем в редактирование городов (Справочники - Города), находим город Москва и указываем в поле "Порядок сортировки" значение 100. 4. Теперь возвращаемся в Приложения - Редактор форм, открываем таблицу data, находим колонку city_id, нажимаем редактировать эту колонку. 5. Находим строчку SQL-запрос, кликаем по "Показать запрос", увидим что там написано: select * from re_city order by name6. Меняем на select * from re_city order by sort_order desc, name7. Сохраняем Теперь Москва всегда будет первой в списке. -
3 points
Скачивание фото одним архивом из объявлений
Helenblondi and 2 others reacted to Chernetskiy for сообщение в теме
Ну или вариант готового блока кнопок, под заголовок объявления: <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> Последние кнопки Редактировать и Удалить для удобства владельца объявления и показываются зарегистрированным - риэлтору, админу... кого определите в настройках. К стати, можете "Выгрузить все фото" переместить к показу не всем а туда-же, к зарегистрированным, если это платная услуга. -
3 points
Биллинг - тариф по-умолчанию
genapro_111 and 2 others reacted to Дмитрий Кондин for сообщение в теме
Для того чтобы у пользователя был после регистрации тариф по-умолчанию. Например, тариф Начальный у которого tariff_id = 1 нужно сделать в phpmyadmin вот такую операцию alter table re_user alter column tariff_id set default 1;Соответственно вам также нужно скрыть поле user.tariff_id от других групп, и должно быть доступно только администратору это поле для редактирования, чтобы пользователи сами не могли менять тарифы. -
3 points
В чем проблема риэлтора, его боль? И как ее решить?
Helenblondi and 2 others reacted to Chernetskiy for сообщение в теме
Насущная проблема агентства недвижимости или частного риэлтора - ведение собственной базы предложений объектов и их представление/реклама на просторах Интернета, с максимальным охватом целевой аудитории. Думаю, что на настоящий момент этот вопрос максимально решен в CMS Sitebill. Гибкое решение и открытый код в CMS Sitebill позволяет адаптировать еe к конкретным требованиям владельца сайта и добавлять свои решения. Однако большинство пользователей данной CMS - далекие от программирования риэлторы, которым приходится осваивать азы программирования по ходу общения с продуктом, методом проб и ошибок, консультаций, изучения форума. Многие подсказки что и как настроить или сделать на сайте уже имеются на форуме и в Wiki, однако мало материала изложенного в простой и доступной форме, а имеющийся больше рассчитан на людей знакомых с основами PHP и HTML. Что и как работает в CMS, назначение многих настроек и функций наверное для подавляющего большинства её пользователей - большая загадка, и если на эти вопросы не находятся ответы, то вопрос откладывается в долгий ящик или вовсе забрасывается, что заканчивается обилием сайтов в зародышевом состоянии на протяжении года и более. В связи с этим, CMS сдерживается в практическом применении и как следствие - её распространенности среди риэлторов. Хорошим подспорьем являются видео-уроки по основным моментам настройки и внедрения дополнительного функционала. У CMS имеется много преимуществ перед решениями конкурентов, но для того, чтобы перейти на неё, зачастую требуется большой опыт проб и ошибок в работе с другими продуктами, желание разбираться в настройках и изучении кода, а главное - терпение + свободное время, которого всегда нет. Почему перешел на CMS Sitebill? На эту CMS наткнулся случайно, по рекламе в Интернете. В это время был достаточный опыт общения с подобными решениями конкурентов, но у них функционал был менее гибок и ограничен, техподдержка по большей части никакая, предложения по улучшениям или устранениям очевидных недоработок или ошибок - отвергались или этим просто некому было заниматься. Самостоятельно что-либо изменить - не обсуждалось и такая возможность не предоставлялась. Сторонние решения предоставлялись как есть, по большей части основанные на древних разработках со скудным функционалом и без желания разработчиков на их развитие. К этому времени пропало желание кормить сторонние сервисы солидными суммами за любой малозначимый функционал (например мета-теги к объявлениям ), как и отдавать свой бизнес под настроение владельцев этих сервисов. Примерно полгода я присматривался к CMS Sitebill, но уже сначала было понятно, что у этого проекта есть хорошая перспектива, а разработка CMS в тандеме c действующими риэлторами и руководителями агентств недвижимости, объединенными на форуме техподдержки, позволило доработать CMS до высокого уровня готовности к работе со старта и обеспечить всем необходимым функционалом. В конечном итоге я перевел свой сайт на CMS Sitebill и вполне доволен. Выгода перехода на CMS Sitebill в том, что не приходится зависеть от кого-либо, в твоем распоряжении готовое, относительно недорогое и гибкое решение с открытым кодом, что дает возможность в любое время что-то изменить, дополнить или доработать применительно к своим требованиям, требованиям рынка, SEO, поисковиков и соцсетей, сторонних рекламных порталов, поддерживая систему в технологически актуальном состоянии. Наличие готовых современных шаблонов значительно упрощает задачу по разработке сайта агентства недвижимости, а наличие дополнительных специализированных модулей расширяет возможности CMS для узко-специализированных решений в сфере недвижимости. CMS Sitebill может стать одинаково полезным и эффективным инструментом как для частного риэлтора, так и для агентства недвижимости, строительной компании, отеля, портала объявлений недвижимости. С небольшими доработками может быть применена в иных сферах - автобизнес, турбизнес, витрина или портал предложений чего-либо из однотипного ассортимента и т.п. Возможности CMS ограничены только вашей фантазией -
3 points
поделиться в соц.сетях новостями
Helenblondi and 2 others reacted to Chernetskiy for сообщение в теме
Непосредственно в новостях не совсем удобно, там идет перечисление анонсов и отправлять список анонсов в соцсети не совсем подходящий вариант. Лучше это сделать в шаблоне вывода новости (/apps/news/site/template/), т.к. посетитель будет открывать анонс и переходить в саму новость. Соответственно добавить кнопки лучше под саму новость, перед анонсами других новостей. За это дело отвечают файлы news_grid.tpl и news_view.tpl Я например переиначил news_view.tpl так: <link rel="stylesheet" href="{$estate_folder}/apps/news/site/template/css/style.css"> <div id="singleNews"> <div class="title" align="center"><h1>{$news.title.value}</h1></div> <div class="share"></div> <div class="text" align="justify"> {if $news.prev_img neq ''} <img src="{$news.normal_img}" width="270" alt="{$news.title.value}" class="alignleft" align="left" style="padding: 10px;" /> {/if} {$news.description.value} </div><!-- .text --> <div class="date">{$news.date.value_string} <a href="/">Центр недвижимости</a></div> <div style="clear:both;"></div> </div><!-- #singleNews --> <hr> <h2>Ранее в новостях</h2> {if $more_news|count>0} <div id="news" class="archive"> {section name=i loop=$more_news} <div class="news"> <div class="title"><h3><a href="{$more_news[i].href}">{$more_news[i].title}</a></h3></div> {if $more_news[i].prev_img neq ''} <div class="image_news"><a href="{$more_news[i].href}"><img src="{$estate_folder}{$more_news[i].prev_img}" width="150" border="0" alt="{$more_news[i].title}" /></a></div> {/if} <div class="anons" align="justify">{$more_news[i].anons|strip_tags}</div> <div class="date">{$more_news[i].date}</div> </div> <div class="clear"></div> {/section} </div> {/if} {if 1==0} <!-- <script src="{$estate_folder}/apps/comment/js/comment_controller.js"></script> --> {literal} <script> /*$(document).ready(function(){ $('.cmnts').Comment_Controller({object_type:'news', object_id:'{/literal}{$news.news_id.value}{literal}'}); });*/ </script> {/literal} <div class="cmnts"></div> {/if} Соответственно, кнопки соцсетей можно впихнуть где-нибудь между <div>-ами </div><!-- .text --> <div class="date">{$news.date.value_string} <a href="/">Центр недвижимости</a></div> <div style="clear:both;"></div> </div><!-- #singleNews --> Только перепиши Центр недвижимости на своё агентство. Посмотреть как выглядит у меня можно здесь -
3 pointsЛегко. Пошагово для realia: 1. В первую очередь определяем, что вообще используем schema.org типа product. Для этого в шаблоне realty_view.tpl находим блок, содержащий все, что между крошками и футером/спецпредложениями - это div класса row - и корректируем под нужную нам схему: <div class="row" itemscope itemtype="http://schema.org/Product"> 2. Определяем имя продукта - это то, что находится под заголовком стиля page-header (по умолчанию, правда, это почему-то заголовок второго уровня, рекомендую поменять его h1): <h1 class="page-header"><span itemprop="name"> ЗДЕСЬ ТО, ЧТО У ВАС ИДЕТ В КАЧЕСТВЕ ЗАГОЛОВКА ОБЪЯВЛЕНИЯ, СКОРЕЕ ВСЕГО {$title} </span></h1> 3. Т.к. мы этот продукт предлагаем, то значит это тип Offer - для этого всю таблицу с характеристиками помечаем нужным образом. Ищем соответствующий <div class="noverview-short"> и меняем его: <div class="noverview-short" itemprop="offers" itemscope itemtype="http://schema.org/Offer"> 4. Добавляем изображение - для этого ищем ниже заглавное изображение объявлений вида <img src="{$estate_folder}/img/data/{$photo[0].normal}" и добавляем к нему параметр itemprop="image": <img src="{$estate_folder}/img/data/{$photo[0].normal}" itemprop="image"> 5. Все объявления актуальны? Вставляйте в любом месте тег "На складе": <link itemprop="availability" href="http://schema.org/InStock"> 6. Не забываем про ценник - система его вывода достаточно неоднозначна и скорее всего, у Вас он формируется автоматически в процедурах вывода характеристик объекта, поэтому мы с ним в стили лезть не будем, а просто пропишем отдельно. Вариант, если у Вас только рубли: <meta itemprop="price" content="{$data_shared.price.value|number_format:0:".":""}"> <meta itemprop="priceCurrency" content="RUB"> Но у меня цены есть еще и в долларах, поэтому приходится проверять - если в рублях, то рубли, если в USD, то в USD: <meta itemprop="price" content="{$data_shared.price.value|number_format:0:".":""}"> {if $data_shared.currency_id.value == 2} <meta itemprop="priceCurrency" content="USD"> {else} <meta itemprop="priceCurrency" content="RUB"> {/if} 7. Описание товара - ищем {$data.text.value|nl2br} и обволакиваем нужными нам параметрами: <span itemprop="description">{$data.text.value|nl2br}</span> 8. В принципе, основная часть готова. Проверить то, что сделали, можете в валидаторах. Валидатор от Гугла - https://search.google.com/structured-data/testing-tool Валидатор от Яндекса - https://old.webmaster.yandex.ru/microtest.xml Рекомендую пользоваться и тем, и другим - причем в отличие от мобильной дружелюбности, здесь гугл гораздо строже. PS: модераторы, исправьте, пожалуйста, название этой темы - не хватает одной буквы в слове sChema.org
-
3 points
Убираем page=1
DoobBY and 2 others reacted to mmkulikov for сообщение в теме
Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации Добавляем в main.php шаблона в самом начале функции main следующий код: $r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл -
3 points
Спасибо cms site bill за мое счастливое детство!
domprim.ru and 2 others reacted to domprim.ru for сообщение в теме
Уже пол года я иду с CMS Sitebill за руку и я реально доволен, мне нравится что разработчики не стоят на месте и постоянно улучшают и всячески дополняют свой продукт, мне нравится что в обновлениях и дополнениях я вижу все мои пожелания, которыми я делюсь у них на форуме, мне нравится постоянная онлайн помощь и поддержка от разработчиков, мне нравится цена за услуги, мне нравится философия которой они руководствуются при создании всего, мне нравится когда в ответ на мои бредовые порою пожелания мне отвечают позитивно и доброжелательно! Да господи я вообще счастлив что встретил этих ребят -
3 points
Монетизация с помощью списков просмотров
Александр Лубянский and 2 others reacted to abushyk for сообщение в теме
Суть Разрешить просмотр контактных данных объявления для пользователей, которые подключили и оплатили некоторый список просмотра (СП). Список просмотра регламентирует количество дней на протяжении которых доступен просмотр контактов и стоимость данного периода. Подключение СП проходит через раздел Личного кабинета (ЛК), а оплата списка производится из ЛК посредством Робокассы. Намеренно исключаю возможность задания СП при регистрации, когда вместе с регистрационными данными пользователь должен выбрать конкретный вариант СП, что бы унифицировать процедуру пользования СП для обычных пользователей и пользователей регистрирующихся через соцсети. Пример будет приведен на базе шаблона realia, но для любого другого шаблона принцип будет аналогичен. Приницип работы При загрузке страницы происходит извлечение СП для текущего пользователя. Если есть в наличии хоть один активный для данного момента времени СП в переменную сессии сохраняется состояние "открыто". Этот параметр проверяется в местах, где необходим вывод контактны данных и средствами шаблона принимается решение - выводить или скрыть блок с контактными данными. Задействованные приложения registersms - приложение используется формально. Находится в выключенном состоянии и служит для хранения настроки соотношения периода СП и цены за этот период. В принципе не критично и может быть реализовано отдельной настройкой watchlistmanager - приложение-хранилище функционала для работы СП. Должно быть, быть включенным и установленным. настройки Робокассы - must have Необходимые файлы Набор вспомогательных файлов можно скачать тут Файлы в архиве расфасованы согласно структуре шаблона. Т.е. то, что находится в папке main должно лечь в папку main вашего шаблона etc. Изменения В файле main.php Внутри class frontend_main extends SiteBill_Krascap {...} добавляем функцию getViewOptions, которая загружает СП для пользователя. Код функции копируем из http://pastebin.com/8rMZNU4U В функции main() производим вызов вставленной выше функции и загрузку цен на СП из конфигурации. Общий код изменений тут Блок А вставляем после строк $work_subcontroller='';$has_result=false;$undetected_url=false;Блоком Б заменяем блок if ( !$has_result && preg_match('/\/robox/', $_SERVER['REQUEST_URI']) ) {...}Блоком В дополняем ветвистость if ( preg_match('/^account\/profile/', $REQUESTURIPATH) ) {перед последним }else{ В файле header.tpl Добавляем кусочек, заносящий цены в переменные скриптов {literal}<script type="text/javascript">var _costs={/literal}{if $_costs ne ''}{$_costs}{else}[]{/if}{literal};</script>{/literal}Блок ставится в любом месте между тегами <head> и </head> В файле realty_view.tpl Фактически основные функциональные изменения, которые скрывают контактные данные. Находим блок, отображающий контактные данные и обрамляем его конструкцией {if $smarty.session.viewOptions.mode=='opened'}<!--Тут собственно контактные данные-->{else}Оплатите доступ к данным или другая информация{/if}Настройка Руководящими настройками для работы СП являются настройка цен. Соответствие цен и длительности периодов указывается в переменной Настройки - Регистрация через SMS - Стоимость категорий (apps.registersms.costs_array). Значения задаются в виде строки {N1:P1}{N2:P2}{N3:P3}{N4:P4}{N5:P5} - где N- длительность периода. По-умолчанию в днях. Р- стоимость этого периода. Например: {1:70}{2:100}{3:150}мы предусматриваем открытие просмотров контактов в вариантах на 1, 2 или 3 дня с соответствующими стоимостями 70, 100 и 150 рублей. Кроме этого места необходимо еще указать допустимые периоды (продублировать) в обработчике СП - /template/frontend/шаблон/main/local_watchlistmanager.php. В этом файле необходимо найти функцию getWLModel() и в ней изменить строку $form_data['period']['grade_values'] = array('1', '2', '3', '7', '31');где указать наш перечень периодов $form_data['period']['grade_values'] = array('1', '2', '3');Замечание Шаблон realia оборудован плагином-украшателем ezMark, который, не смотря на свою красивость, доказал несостоятельность при работе с элементами типа radio - кружочки с точечками в форме. Поскольку форма добавления СП использует именно такие элементы, а в остальных формах мы практически не используем их, то рекомендую сузить область работы этого плагина только элементами типа checkbox. Для этого в файле /template/frontend/realia/js/realia.js в функции InitEzmark() следует закомментировать строку $('input[type="radio"]').ezMark(); -
3 pointsПривет всем! Скорее всего, уже многим известно, но все же напишу, вдруг кому-то понадобится. Появилась необходимость сокращения ссылок на какой-либо объект, например, для отправки клиенту по смс или размещения более красивой ссылки для рекламы. Это легко делается по Id-объекта. Например, Ваша ссылка на объект www.site.ru/arenda-kvartir/arenda-flats/1-komn/realty555/ Для поисковика - ссылка хорошая, а для человека, которому она пришла в смс (например) - длинная. Сократить ее до более красивой можно легко, оставив адрес самого сайта и конец ссылки, в данном случае /realty555 555 - это и есть Id вашего объекта. Получится: www.site.ru/realty555 Согласитесь, более лаконично? Спасибо за внимание!
-
3 points
Полезные ресурсы (for dev)
ZafiraPels and 2 others reacted to XTRO for сообщение в теме
Where.io — вручную подобраные ресурсы на разные темы cssreflex — наглядным образом посмотрим про CSS вкусности Clusterize.js — плагин для отображения больших обьемов данных -
3 points
не работает переход назад после просмотра фото Realia
Дмитрий Кондин and 2 others reacted to pushnov for сообщение в теме
К сожалению, это проблема скрипта prettyPhoto. Везде где я сталкивался с этим скриптом, присутствует данная проблема. Точно уже не помню, но если мне не изменяет память, то я избавлялся от этой проблемы путем добавления подобной строчки $("a[rel^=prettyPhoto]").prettyPhoto({deeplinking: false}); -
3 points
Предложения для будущих версий.
denkurgan and 2 others reacted to Smoke for сообщение в теме
Предлогаю в будущем сделать вариант выбора категорий продажи и аренды по отдельности. К примеру пользователь выбирает тип размещаемого объявления Продажа или Аренда и далее открывается второй селект бокс с вариантами для продажи или аренды соответственно. Актуально для тех, у кого много категорий и подкатегорий. При добавлении или поиске слишком длинный список вариантов открывается и это хороший вариант его уменьшить. -
3 points
Не все так хорошо в красноярском королевстве
Александр Лубянский and 2 others reacted to Moses for сообщение в теме
Я тоже хочу сказать немного об этом движке. У меня тоже был выбор между двумя платными CMS, но выбрал эту. Честно сказать не жалею. То что хотел сделать, я сделал малыми потерями для себя, так как немного понимаю в этом всем, но и помощь была оказана. Конкуренты мне завернули такую сумму за переделки, которые нужны были мне, что у меня волосы дыбом встали. С точки зрения тех поддержки тут все нормально. С точки зрения функциональности даже самой админки, есть много вопросов (я думаю все доведут до ума). Но и конечно же что меня смутило больше всего это отсутствие описания по каждой функции, некоторые настройки вообще не понятны, приходится все проверять методом научного тыка. Документации тоже не очень много, либо она очень сложная для понимания. В оправдание хочу сказать что многие популярные движки начинали точно так же, все приходит со временем. Джумлу постоянно улучшают вот уже больше 10 лет. Подводя итог хочу сказать вот что: 1) не жалею о выбранном движке, 2) ребята доведут до ума не только функционал, но и все настройки 3) а так же выпустят онлайн документацию, возможно даже со всеми наработками, которые уже приходилось делать для пользователей -
3 points
убрать вход выход с сайта шаблон Realia
Даниэль and 2 others reacted to Михалыч for сообщение в теме
Файл main.tpl, закомментировать или удалить строку <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> меню Регистрация ↑ <a class="btn btn-primary btn-small" data-toggle="modal" href="{$estate_folder}/logout/">{$L_LOGOUT_BUTTON}</a>меню Выход, файл top_fixed_menu.tpl.html ↑ -
3 points
Где править блок с тремя: Добавить, Снять, Ипотека
Даниэль and 2 others reacted to Chernetskiy for сообщение в теме
Смотря что править, если код, то это в 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 - описание -
3 points
разницу между фиксированной, резиновой, адаптивной и отзывчивой вёрсткой
ZafiraPels and 2 others reacted to XTRO for сообщение в теме
Не понимаете разницу между фиксированной, резиновой, адаптивной и отзывчивой вёрсткой? Сайт Liquidapsive демонстрирует их различия. Можно выбрать интересующий вас тип вёрстки и изменить размеры окна браузера, чтобы посмотреть, как он себя ведёт в разных условиях. -
3 points
Обновление 2.8.2
Doka and 2 others reacted to Дмитрий Кондин for сообщение в теме
Сначала обновить system до 2.8.2 Затем приложения admin, table, columns, config, comment (у кого есть). В обновлениях: 1. Заменили редактор структуры, теперь удобнее удалять и редактировать. 2. Добавили новый тип загрузчика картинок (в редакторе форм для таблицы data - удалить старое поле image и добавить новое поле image с типом uploads и отмеченной галочкой "Хранить значение поля в таблице") 3. В конфиге добавились опции: Не публиковать объявления из ЛК без премодерации, Использовать встроенный счетчик просмторов (когда он выключен, то работает система гораздо быстрее), Mailer: Отключить передачу дополнительных флагов в заголовках письма - на некоторых хостингах с этим флагом почта не идет, Сохранять копию изображений без водяного знака (для этого нужно создать каталог /img/data/nowatermark/Вскоре сделаю видео об этих новых функциях и их использовании. NB. Поле типа uploads по сути не является заменителем для поля типа uploadify_image. Мы предприняли некоторые действия для поддержания новым полем старых данных, но, в первую очередь, следует рассматривать поле типа uploads как новый тип данных со схожим с uploadify_image функционалом. (abushyk) -
3 pointsСпасибо разобрался. Если кому нужно то выводиться вот таким кодом {$grid_items.img|count}
-
3 points
Количество объявлений в категории
abushyk and 2 others reacted to mmkulikov for сообщение в теме
Нашел решение. Может кому еще сгодится /*** Получение количества объявлений* @param int $catID - ID категории (необ.)* @param date $start - Дата начала публикаций (необ.)* @param date $end - Дата конца публикаций (необ.)** @return array $ret****/ private static function getAdvtCount($catID=false,$start=false,$end=false) { $ret = array(); $where = ""; $table = "`".DB_PREFIX."_data`";$DBC=DBC::getInstance(); if (false !== $catID) $where = " AND $table.`topic_id` = $catID"; if (false !== $start && false === $end ) $where .= " AND $table.`date_added` <= '$start'"; if (false === $start && false !== $end ) $where .= " AND $table.`date_added` >= '$end'"; if (false !== $start && false !== $end ) $where .= " AND ($table.`date_added` <= '$start' AND $table.`date_added` >= '$end')"; $query = "SELECT count(*) AS total FROM $table WHERE $table.`active`=1".$where; $result = $DBC->query($query); if ($result) {while($r = $DBC->fetch($result)){$ret[] = $r; } } return $ret; } -
3 points
Мультиселект при поиске
Chernetskiy and 2 others reacted to Дмитрий Кондин for сообщение в теме
Возрадуйтесь люди! Грядет новая форма поиска! Вводите здесь в Вид деятельности что-нибудь и выбирайте, а потом снова вводите http://base.line-inform.ru/ -
3 points2015/05/26 21:26:57 [error] 69392#0: *58461 FastCGI sent in stderr: "PHP message: PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0" while reading response header from upstream, request: "POST /js/ajax.php?action=get_my_favorites HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fpm.sock:"2015/05/26 21:26:57 [error] 69392#0: *58461 FastCGI sent in stderr: "PHP message: PHP Warning: Cannot modify header information - headers already sent in Unknown on line 0" while reading upstream, client: 82.116.42.42, server: arb64.ru, request: "POST /js/ajax.php?action=get_my_favorites HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fpm.sock:"Собственно о чем тема.Переносил сайт со старого хостинга на новый, на старом была версия php 5.3, а на новом 5.6. Принципиально не стал понижать, дабы использовать самую последнююСобственно на 5.3 ошибки этой не было а на 5.6 естьНа стандартном шаблоне при переходе по вкладками Избранное и Спецпредложения, была вечная "Загрузка"Поставил в php.ini значение always_populate_raw_post_data="-1" и все заработалоМожет кому пригодитсяСпасибо.
-
3 points
.htaccess
Richardrap and 2 others reacted to johnsage for сообщение в теме
# Блокируем хитро..ые (Request) запросы через .htaccess <ifModule mod_alias.c> RedirectMatch 403 /(\$|\*)/?$ RedirectMatch 403 (?i)(<|>|:|;|\'|\s) RedirectMatch 403 (?i)([a-zA-Z0-9]{18}) RedirectMatch 403 (?i)(https?|ftp|php)\:/ RedirectMatch 403 (?i)(\"|\.|\_|\&|\&)$ RedirectMatch 403 (?i)(\=\\\'|\=\\%27|/\\\'/?)\. RedirectMatch 403 (?i)/(author\-panel|submit\-articles)/?$ RedirectMatch 403 (?i)/(([0-9]{5})|([0-9]{6}))\-([0-9]{10})\.(gif|jpg|png) RedirectMatch 403 (?i)(\,|//|\)\+|/\,/|\{0\}|\(/\(|\.\.|\+\+\+|\||\\\"\\\") RedirectMatch 403 (?i)/uploads/([0-9]+)/([0-9]+)/(cache|cached|wp-opt|wp-supercache)\.php RedirectMatch 403 (?i)\.(asp|bash|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf|well) RedirectMatch 403 (?i)/(^$|1|addlink|btn_hover|contact?|dkscsearch|dompdf|easyboard|ezooms|formvars|fotter|fpw|i|imagemanager|index1|install|iprober|legacy\-comments|join|js\-scraper|mapcms|mobiquo|phpinfo|phpspy|pingserver|playing|postgres|product|register|scraper|shell|signup|single\-default|t|sqlpatch|test|textboxes.css|thumb|timthumb|topper|tz|ucp_profile|visit|webring.docs|webshell|wp\-lenks|wp\-links|wp\-plugin|wp\-signup|wpcima|zboard|zzr)\.php RedirectMatch 403 (?i)/(\=|\$\&|\_mm|administrator|auth|bytest|cachedyou|cgi\-|cvs|config\.|crossdomain\.xml|dbscripts|e107|etc/passwd|function\.array\-rand|function\.parse\-url|livecalendar|localhost|makefile|muieblackcat|release\-notes|rnd|sitecore|tapatalk|wwwroot) RedirectMatch 403 (?i)(\$\(this\)\.attr|\&pws\=0|\&t\=|\&title\=|\%7BshopURL\%7Dimages|\_vti\_|\(null\)|$itemURL|ask/data/ask|com\_crop|document\)\.ready\(fu|echo.*kae|eval\(|fckeditor\.htm|function.parse|function\(\)|gifamp|hilton.ch|index.php\&\;quot|jfbswww|monstermmorpg|msnbot\.htm|netdefender/hui|phpMyAdmin/config|proc/self|skin/zero_vote|/spaw2?|text/javascript|this.options) </ifModule> -
3 points
Скрыть блоки Наши агенты и Агент
TopRaN and 2 others reacted to maxpostal for сообщение в теме
Прошу прощения за малоинформативное сообщение. Имелось в виду отключение блоков Наши агенты и Агент в шаблоне Realia без правки кода. Думал, что можно отключить виджет с классами widget our-agents через настройки без удаления или комментирования кода. -
3 pointsПользователи разделяются на тех кто не делает бэкапы, и тех кто уже делает. Перед обновлением рекомендуется делать архивы файлов и БД. особенно тем, кто использовал решения различных программеров. Архив БД - при помощи PhpMyAdmin (как правило все хостеры предоставляют) с учетными данными, выданные вашим хостером, выбираем БД и делаем 'Экспорт' Архив файлов (на выбор): 1) в командной строке SSH-клиента «PuTTY» например создать архив для каталога 'docs' tar -czf archive.tar.gz docs распаковать архив archive.tar.gz: tar -xzf archive.tgz примеры других команд или ещё 2)При помощи WinSCP - правый клик на каталоге-Custom Commands-Tar/GZip 3) Far или Midnight Commander Для запуска Midnight Commander подключитесь к хостингу по SSH и введите команду 'mc' 3) ну или долго в лоб c FilleZilla (если проект мини, а канал быстрый)
-
3 points
Кнопка "добавить объявление"
ДимДимыч and 2 others reacted to abushyk for сообщение в теме
В самом общем случае: {if $smarty.session.user_id eq ''}<a class="btn btn-primary btn-large list-your-property arrow-right" href="{$estate_folder}/add/">{$L_ADD_ADV}</a>{else}<a class="btn btn-primary btn-large list-your-property arrow-right" href="{$estate_folder}/register/">{$L_ADD_ADV}</a>{/if}если делать на кнопках. Если копнуть глубже, то в main.php шаблона найти блок if ( !$has_result && preg_match('/^add(\/?)$/', $REQUESTURIPATH) ) {...}и в нем добавить условие if ( !$has_result && preg_match('/^add(\/?)$/', $REQUESTURIPATH) ) { if(0==(int)$_SESSION['user_id']){ header('location: '.SITEBILL_MAIN_URL.'/register/'); exit(); } ... тут все что было} -
3 points
Вопросы от новичка 1.0
kmavega and 2 others reacted to Дмитрий Кондин for сообщение в теме
Так как сюда пишут уже все подряд, и никто здесь уже ничего толком найти не сможет решено закрыть тему. Теперь общие темы будут глушиться. Только конкретные заголовки и только конкретные вопросы. -
3 points
Кнопка "Редактировать" на странице объекта
NikL and 2 others reacted to Дмитрий Кондин for сообщение в теме
Берем файл /template/frontend/realia/realty_view.tpl Добавляем код {if $data.user_id.value eq $smarty.session.user_id}<a href="{$estate_folder}/account/data/?do=edit&id={$data.id.value}">Редактировать</a>{/if} -
3 points
Обновление system 2.8.6
XTRO and 2 others reacted to Дмитрий Кондин for сообщение в теме
1. Исправлена уязвимость XSS для полей safe_string. Больше нет возможности в строковых полях ввода вводить разметку. 2. Для поля textarea добавлена опция разрешающая все теги. (Достигается установкой параметра allow_htmltags и значения для него 1 в разделе Параметры для выбранного элемента. По умолчанию, с этого обновления, из поля типа textarea - тех, которые отображаются стандартным html-полем ввода текста - вся разметка будет вырезаться). Не касается поле с типом textarea_editor, снабженных полноценными редакторами. NB. Обратите на это внимание те, кто использует приложение Баннеры. 3. В конфиге добавлены опции Уведомлять администратора о платежах по email (notify_about_payment) При использовании базового модуля оплаты через Робокассу устанавливает необходимость отправки уведомления администратору о наличии платежа. Закрыть сайт (is_underconstruction) Закрывает фронтальную часть сайта на обслуживание. Так как опция новая, то, для полноценной ее работы, необходимы некоторые изменения в шаблоне. IP разрешенный для доступа в закрытом режиме (is_underconstruction_allowed_ip) Указывает IP адрес пользователя, который может иметь доступ к сайту, закрытому на обслуживание.Описание всех опций конфига тут http://wiki.sitebill.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8 4. Добавлена автоматическая установка системных утилит 5. Добавлено приложение apps.logger http://wiki.sitebill.ru/index.php?title=System_logger 6. Добавлено приложение apps.customentity для управления пользовательскими элементами, которые нужны, но для которых нет фабричного приложения. Для работы этого приложения необходимо сделать операцию установки перейдя в админке по адресу /admin/index.php?action=customentity&do=install В ответ вы не увидите ничего, но в БД должна появиться таблица re_customentity. 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 , которая будет связана с элементами из предыдущего пункта и не только. 7. Добавлено приложение toolbox (для миграции картинок из старого uploadify -> uploads) http://wiki.sitebill.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%22Toolbox%22. Приложение рассчитано на понимающего, что делает, пользователя и не обладает интуитивным интерфейсом. Если сомневаетесь - лучше не тыкайте по кнопкам, а проконсультируйтесь со мной (abushyk). Бекапы БД и файлов сайта, перед использованием этого приложения, обязательны. 8. Исправлен баг - при удалении всех категорий выскакивала ошибка. 9. Теперь при включении опции use_new_realty_grid видна минимальная сетка для объявлений, раньше было пусто. Остальные поля добавлять также через редактор форм - Grid manager. 10. Для поля uploads теперь максимальный размер загружаемого фото = установленному системой. Максимальный размер устанавливается автоматически из настроек сервера. Если сервер у вас пропускает 200М, то для картинок этот размер весьма избыточен. Дабы не дать врагам замусорить сервак стомегапиксельными картинками каждый элемент uploads поддерживает свою автономную настройку пропускной способности в виде параметра max_file_size и значения для него в виде целого числа допустимых мегабайтов на картинку. 10а. uploads так же поддерживают свои размеры картинок (размеры для полноэкранки и превью) с помощю параметров prev_width, prev_height, norm_width, norm_height и указанными пиксельными размерами. Єти настройки перекрывают базовые. Так же поддерживается настройка в виде параметра preview_smart_resizing, которая аналогична настройке из Настройки - Дополнительно - Использовать умную подгонку превьюшек, но в отличии от нее, работает не только на картинках для объявлений. 11. Создание пользовательских форм заявок http://wiki.sitebill.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D1%83%D1%8E_%D1%84%D0%BE%D1%80%D0%BC%D1%83_%D0%B7%D0%B0%D1%8F%D0%B2%D0%BA%D0%B8 -
3 points
Предложения для будущих версий.
qwirks and 2 others reacted to Chernetskiy for сообщение в теме
Поскольку в Sitebill'e есть модуль Робокассы и возможность клиенту внести деньги на счет агентства, может есть смысл организовать платные услуги для клиентов - запрос выписок из ЕГРП, кадастровых паспортов, внесение денег в счет бронирования объектов (если клиент не местный)... Смысл предполагается в том, что клиент заходит на сайт, заказывает ту или иную услугу (список и расценки на которые редактирует админ), выставляет себе счет и оплачивает через Робокассу (соглашаясь с договором оферты)... далее риэлтор бегает ножками а клиент впоследствии получает свою справочку... Если тема интересна, наверное есть смысл сразу продумать форму заказа, поскольку от клиента нужны будут сведения по объекту недвижимости - адрес, кадастровый или условный номер и т.п., собственно эти сведения могу указать дополнительно. Может быть и решить вопрос таким образом, чтобы по результату запроса клиента, на стороне агентства сразу составлялась или печаталась форма заявления в Росреестр.... Образцы тоже могу выслать. Может быть и в ЛК клиента сделать список заказов и присваивать им статус, как в интернет-магазине "Принято", "В работе", "Исполнено" с отправкой результата по электронке или иным вариантом. Клиенты иногда такими услугами интересуются, почему-бы не автоматизировать? Как идея? -
3 points
Cтраница с объектами агента /userХХ.html
Realtor and 2 others reacted to abushyk for сообщение в теме
Базовое решение. На примере шаблона agency 1. /template/frontend/agency/main/main.php ищем строку if(!$has_result && preg_match('/user(\d+).html/', $_SERVER['REQUEST_URI'], $matches)){которая открывает блок, где у нас рисуется сетка объявлений пользователя. После $this->setRequestValue('user_id', (int)$matches[1]);делаем дополнение $DBC=DBC::getInstance();$query='SELECT fio, phone FROM '.DB_PREFIX.'_user WHERE user_id=?';$stmt=$DBC->query($query, array((int)$matches[1]));if($stmt){$ar=$DBC->fetch($stmt);$this->template->assert('grid_user_info', $ar);}Этот блок выбирает данные из таблицы юзеров. Список fio, phone можно расширить нужными вам именами из модели user. Не делаете 'SELECT * ', что бы не выхватывать пароли-явки. Только нужные поля. Теперь в переменной {$grid_user_info} шаблона у нас есть данные. 2. /template/frontend/agency/realty_grid.tpl В этом шаблоне, в месте где должен быть вывод данных юзера, делаем проверку {if isset($grid_user_info)}...{/if}так как этот файл выводит все сетки, поэтому удостоверяемся, что данные есть. А внутри этогой проверки делаем нужный нам формат вывода.Например{if isset($grid_user_info)}<b>имя</b> {$grid_user_info.fio}{/if}В итоге, и в систему не влезли, и данные получили. -
3 points
Предложения для будущих версий.
kmavega and 2 others reacted to Realtor for сообщение в теме
Добавить в базу таблицу черный список телефонов. При добавлении объявления через ссылку на сайте добавить объявление или через загрузку exel файла или при загрузке xml файла, будет происходить сравнение номера телефона подающего объявление с черным списком. В случае совпадения объявление с таким телефоном не будет активироваться и попадать в архив с определенной пометкой. Механизм поиска по номерам телефонов уже есть в админке. -
3 points
Начинаем защищать авторское право
XTRO and 2 others reacted to Дмитрий Кондин for сообщение в теме
http://www.youtube.com/watch?v=2L9_Tmxg5jY -
3 pointsИтак, мы имеем набор полей: is_wifi Наличие интернета - поле типа checkbox. На форме присутствует в сиде чекбокса. floor_type Тип покрытия пола - select_box с вариантами {0~~не указано}{1~~плитка}{2~~дерево}{3~~ламинат} - отображается в виде выпадающего списка sea_distance Расстояние до моря. Тип safe_string, но отмеченный как is_ranged=1, что бы в форме поиска выводилось в виде двух полей - макс. и мин. значения. Мы добавили эти поля в модель, каким-то образом разместили их на формах поиска. Теперь главная задача - заставить движек обработать их. Для этого существует файл шаблонного поиска, который размещается в /template/frontend/имя_шаблона/main/ и носит имя template_search.php и не иначе. При наличии этого файла движек автоматически обратится к нему и запросит данные для осуществления выборки. В минимальной комплектации этот файл состоит из класса и двух функций: http://pastebin.com/TmBSS9q8 Задача функции getParams забрать данные из запроса и подумать, стоит ли их передавать дальше. А функции run, к которой обращается движек за данными, решить каким образом следует сравнить\обработать полученные параметры для формирования нужной выборки данных. Итак, поехали. 1 Начнем с самого простого - чекбокса is_wifi. Чекбоксы отличаются тем, что в запросе они либо приходят, либо нет. Из запроса берем его функцией $this->getRequestValue('is_wifi'), которая возвращает значение NULL, если такого параметра не существует. if(NULL!==$this->getRequestValue('is_wifi')){ $params['is_wifi'] = 1; } Проверили, не пусто ли, если нет, значит чекбокс отметили и мы записываем его в $params в виде утвердительной единицы. Единицы потому, что в принципе больше нам инфы не нужно, достаточно знать, что параметр запрошен. Дальше floor_type. Этот тип передается в запрос в виде ключа своих значений. Т.е. выбрав "дерево" в запрос у нас приедет "2". Значит мы знаем, что будет целая цифра. if(0!==(int)$this->getRequestValue('floor_type')){ $params['floor_type'] = (int)$this->getRequestValue('floor_type'); } Мы гарантированно делаем из значения параметра целое число с помощью (int) и сравниваем его с 0 - нашим значением никакого значения. Если оно не равно нулю, значит пользователь запросил конкретный тип покрытия и мы сохраняем его значение в $params['floor_type']. Но сохраняем уже конкретным начением, таккак, в отличии от чекбокса, тут нам важно само значение, а не его наличие. sea_distance. При использовании пользовательских форм, которые енерирует движек на основе ваших выборок это поле представится в виде двух полей с именами созданными по принципу sea_distance_min и sea_distance_max. Соотв. и дву переменные прийдут в запросе. Каждую ловим отдельно. Для простоты допустим, что мы готовы обработать целые расстояния до моря: 1, 5, 100. if(0!==(int)$this->getRequestValue('sea_distance_min')){ $params['sea_distance_min'] = (int)$this->getRequestValue('sea_distance_min'); } if(0!==(int)$this->getRequestValue('sea_distance_max')){ $params['sea_distance_max'] = (int)$this->getRequestValue('sea_distance_max'); } Принцип прост. Мы приводим значение к целому. Если пользователь вписал в поле не число, а "аврцуоац" строку, она приведется к нулю. И сравниваем все это с нулем. Искать по нулевому значению смысла нет, поэтому мы сохраняем только те значения, которые от него отличны. Разницы между мин и макс значением в момент их забора из запроса мы не делаем. Она не важна сейчас, но будет важна в следующей функции. 2 Переходим к функции run() Методика ее работы такая 1. взять параметр 2. создать кусочек запроса. Для чекбокса if(isset($params['is_wifi']) && isset($data_model_array['is_wifi'])){$where_array[]=DB_PREFIX.'_data.is_wifi=1';}Расшифровка. Проверяем, есть ли в параметрах запроса переменная is_wifi и есть ли в нашей модели поле с таким именем (так как условие может быть, а поле мы давно погасили за ненадобностью). Если все эти условия выполнены, мы указываем, что хотим дополнить условия нашего запроса сравнением, которое выберет записи, где is_wifi равно1, т.е. при сохранении записи был отмечен чекбокс. Для floor_typeif(isset($params['floor_type']) && isset($data_model_array['floor_type'])){$where_array[]=DB_PREFIX.'_data.floor_type='.$params['floor_type'];}Все аналогично предыдущему за исключением того, что тут мы просим сравнить поле floor_type записи, которое хранит ключ указанного типа покрытия, с переданным в запросе. Для ранжированного sea_distance if(isset($params['sea_distance_min']) && isset($data_model_array['sea_distance'])){$where_array[]=DB_PREFIX.'_data.sea_distance*1>='.$params['sea_distance_min'];}if(isset($params['sea_distance_max']) && isset($data_model_array['sea_distance'])){$where_array[]=DB_PREFIX.'_data.sea_distance*1<='.$params['sea_distance_max'];}И тут почти без изменений. Главное отличие - мы устанавливаем условия в зависимости от того _max или _min параметр мы хотим сравнить. Обратите внимание на DB_PREFIX.'_data.sea_distance*1. В неоптимизированных БД сайтбилля поля под safe_string имеют строковой тип. Поэтому, что бы не было строкового сравнения, где строковое "2" больше строкового "100", мы принудительно делаем значение поля числом перед сравнением. И тогда уже будет натуральное сравнение, где 2<100. и вот примерно вот так http://pastebin.com/8jX7WEEH все єто будет выглядеть в конце.
-
3 points
Уроки СSS ( урок № 3) меняем дизайн таблиц
Владимир and 2 others reacted to TopRaN for сообщение в теме
Сегодня я расскажу как поменять внешний вид (отображение блоками). Урок достаточно простой. Для начала мы продумаем как мы хотим видеть наш блок. 1.Создаем разметочную область, сам блок. Задаем высоту, ширину, прижимаем влево. .boxt{width: 212px;height: 350px;margin: 40px auto;float: left;margin-left: 15px;position: relative;}2 Добавляем обводку блока для изображения border: 1px solid rgba(39, 33, 33, 0.27);3 Создаем 3 блока с датой, id и тип квартиры .boxt_data {width: 45px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_id {width: 45px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_tip {width: 102px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}4. Добавляем блок изображения .boxt_image {width: 200px;height: 150px;margin: 0px auto;float: left;margin-left: 5px;border: 1px solid rgba(39, 33, 33, 0.27);position: relative;}5. Создаем 4 разметочные области для блоков .boxt_1 {width: 200px;height: 155px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_2 {width: 210px;height: 30px;margin: 0px auto;float: left;margin-left: px;position: relative;}.boxt_3 {width: 210px;height: 30px;margin: 0px auto;float: left;margin-left: px;position: relative;}.boxt_4 {width: 200px;height: 60px;margin: 0px auto;float: left;margin-left: 5px;margin-top: -5px;position: relative;border: 1px solid rgba(39, 33, 33, 0.27);}6.В каждой из разделочных областей мы создадим индивидуальные блоки с нужной нам информацией. Я взял такие как город, улица, площадь и описание. .boxt_g {width: 45px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_g1 {width: 152px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_u {width: 202px;height: 20px;margin: 0px auto;float: left;margin-left: 5px;position: relative;}.boxt_p {width: 45px;height: 20px;margin: 0px auto;float: left;margin-left: 5px;position: relative;}.boxt_p1 {width: 152px;height: 20px;margin: 0px auto;float: left;margin-left: 5px;position: relative;}7. добавим еще 2 блока ( 1 с ценой – 2 с избранным) так же создадим для них разделочную область. Поместим данный блок в блок с изображением. .boxt_ipr {width: 210px;height: 30px;margin: -32px auto;float: left;margin-left: 5px;position: relative;}.boxt_i {text-align: center;width: 25px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}.boxt_pr {text-align: center;width: 157px;height: 20px;margin: 5px auto;float: left;margin-left: 5px;position: relative;}8.Теперь приступим ко второму этапу и по-моему мнению самому важному. Мы будем украшать наши блоки, напишем для них стили. 8.1. блоку .boxt_data, .boxt_id, .boxt_tip мы зададим цвет фона, цвет текста, и зададим положение текста по центру. background:#5599E4;color:white;text-align: center;8.2 аналогично действие мы выполним с другими блоками 9. Теперь для блока boxt_pr добавим размер и цвет текста color: #EBE6E8;font-size: 20px;10. Приступаем помещаем основные функции в созданные нами блоки {section name=i loop=$grid_items} <div class="boxt"> <div class="boxt_data"> {$grid_items[i].date} </div> <div class="boxt_id"> ID {$grid_items[i].id} </div> <div class="boxt_tip"> {$grid_items[i].type_sh} </div> {if $grid_items[i].img != '' } <div class="boxt_image"> <a href="{if $grid_items[i].url!=''}{$grid_items[i].url}{else}{$grid_items[i].href}{/if}" title="{$grid_items[i].city}/{$grid_items[i].district}/{$grid_items[i].street}"> <img src="{$estate_folder}/img/data/{$grid_items[i].img[0].preview}" alt="{$grid_items[i].city}/{$grid_items[i].district}/{$grid_items[i].street}" width="110" /> </a> <div class="boxt_ipr"> <div class="boxt_i"> {if isset($smarty.session.favorites)} {if in_array($grid_items[i].id,$smarty.session.favorites)} <a class="remove_from_favorites" alt="{$grid_items[i].id}" title="{$L_DELETEFROMFAVORITES}" href="#remove_from_favorites"></a> {else} <a class="add_to_favorites" alt="{$grid_items[i].id}" title="{$L_ADDTOFAVORITES}" href="#add_to_favorites"></a> {/if} {/if} </div> <div class="boxt_pr"> {$grid_items[i].price|number_format:0:",":""} </div> </div> </div> {else} <div class="boxt_image"> <a href="{if $grid_items[i].url!=''}{$grid_items[i].url}{else}{$grid_items[i].href}{/if}" title="{$grid_items[i].city}/{$grid_items[i].district}/{$grid_items[i].street}"> <img src="{$estate_folder}/img/no_foto.png" alt="{$grid_items[i].city}/{$grid_items[i].district}/{$grid_items[i].street}" width="110" /> </a> <div class="boxt_ipr"> <div class="boxt_i"> {if isset($smarty.session.favorites)} {if in_array($grid_items[i].id,$smarty.session.favorites)} <a class="remove_from_favorites" alt="{$grid_items[i].id}" title="{$L_DELETEFROMFAVORITES}" href="#remove_from_favorites"></a> {else} <a class="add_to_favorites" alt="{$grid_items[i].id}" title="{$L_ADDTOFAVORITES}" href="#add_to_favorites"></a> {/if} {/if} </div> <div class="boxt_pr"> {$grid_items[i].price|number_format:0:",":""} </div> </div> </div> {/if} <div class="boxt_1"> <div class="boxt_g"> г. </div> <div class="boxt_g1"> {if $grid_items[i].city ne ''} {$grid_items[i].city} {/if} </div> </div> <div class="boxt_2"> <div class="boxt_u"> {if $grid_items[i].street ne ''} {$grid_items[i].street} {if $grid_items[i].number ne ''}, {$grid_items[i].number}{/if} {else} {if $grid_items[i].street ne ''} {$grid_items[i].street} {if $grid_items[i].number ne ''}, {$grid_items[i].number} {/if} {/if}{/if} </div> </div> <div class="boxt_3"> <div class="boxt_p"> пл. </div> <div class="boxt_p1"> {if $grid_items[i].square_all ne ''}{$grid_items[i].square_all}{else}-{/if} / {if $grid_items[i].square_live ne ''}{$grid_items[i].square_live}{else}-{/if} / {if $grid_items[i].square_kitchen ne ''}{$grid_items[i].square_kitchen}{else}-{/if} </div> </div> <div class="boxt_4"> {$grid_items[i].text|strip_tags|truncate:200} </div></div>{/section}Ну вот и все . Пользуемся на здоровье. P.S. перед тем как изменять что-то на своем сайте ОБЯЗАТЕЛЬНО ДЕЛАЙТЕ КОПИЮ!!! Р.s/s/s/s/s Изменения писались под чистую систему (считается та система которая только-что установлена). Но если вы не делали координальных изменений то можете смело заливать. Если Вам интересны мои уроки то пишите отзывы Вы можете написать сами или просто заменить файл который находиться ниже. realty_grid_thumbs.tpl.html -
3 points
Хочу создать свое агенство недвижимости, подскажите!!!
domprim.ru and 2 others reacted to domprim.ru for сообщение в теме
Не согласен насчет сайта, если ваше агентство предусматривает работу исклчительно с помощью сайта, тогда да. А если вы планируете обычное и пресловутое агентство коих миллионы тогда и сайт вам ненужен. Я бы посоветовал начать с базы квартир и клиентской базы. Все супер крутые департаменты недвижимости, которые я видел на протяжении 5 лет стажа работают на "коленке с тетрадочкой";-)))