Дмитрий Кондин

Администраторы
  • Публикации

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

  • Посещение

  • Days Won

    362

Изменения репутации

  1. Like
    Дмитрий Кондин изменил репутацию abushyk в добавить новые поля в поиск (template_search и др.)   
    Итак, мы имеем набор полей:
     
    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_type if(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 все єто будет выглядеть в конце.
  2. Like
    Дмитрий Кондин изменил репутацию slawa в Выгрузка на доски   
    Добрый день всем.
    Здесь очень часто упоминают тему по рассылке объявлений на доски. Наши модераторы делают всё возможное для улучшения сервиса.
    Создали преложения например на афи или циан..., портал: http://www.etown.ru/
    И всё равно тема по рассылке объявлений не утихает.
    Многие пишут про авито или яндекс, там хотят закрепится. Для того чтобы туда что-то сливать, нужны большие вложения.... Маленькие компании не могут себе это позволить. Афи вариант хороший, стоит 2000 руб раз и Про-аккаунт в нашем регионе на афи 250 руб в месяц. Афи рассылает на пару досок дальше бесплатно.
    У меня есть предложение для всего нашего сообщества/пользователей.

    А что если нам создать совместный портал на подобие http://www.etown.ru/ для рекламных целей? Портал назвать каким либо сообществом риелторов России.  Со всех наших сайтов будет уходить на этот проталь объекты недвижимость (как на http://www.etown.ru/). Портал зарегистрировать на всех бесплатных досках и на Афи в том числе (задача модераторов)

    Пример Афи: в данный момент только для меня одного стоит 250 руб. в месяц. Готов платить эти деньги и даже больше нашим модераторам (всё равно надо платить, так лучше своим, чем чужим). То есть набрали например 10 фирм в сообщество, заплатили абонентскую плату =(10*250 руб) 2500 в месяц нашим модераторам. Они же регистрируют наше сообщество на Афи за 250 руб. как одно целое и размещают все наши объекты с созданного для этих целей портала на афи.

    Потенциальные клиенты видят наше объявление на афи (контактные данные), читают, имеют возможность перейти на общий портал, а от туда уже на сайты недвижимости (кнопка- посмотреть все объекты специалиста).

    Для нас как недвижимость удобно: с собственного сайта проходит автоматическая выгрузка на портал, а дальше уже на другие доски. И модераторы не в обиде, делают денежную ставку и модерируют/проверяют занимаются распространением на доски.

    Смысл заключается в том что, этот портал можно гораздо легче продвинуть на Яндексе и на других досках как авито, где требования и цены для мелких компаний не под силу.

    Сначала подключить к порталу все бесплатные доски, затем уже всем сообществом думать о платных платформах: авито, из рук в руки....
    Толи я один покупаю авито магазин, толи один магазин на всех.

    Польза видна не вооружённым глазом:
    1. цена на платные доски делится на всех (+модераторам за работу)
    2. время экономится (с моего сайта уходит дальше и мне больше не надо самому бегать по рекламным доскам, даже афи отпадает)
    3. Разработчики получают с абонентской платы
    4. ...
     
    жду комментарий
  3. Like
    Дмитрий Кондин получил репутацию от Realtor в Редактирование личного кабинета риелтора   
    Наметили задачу, в будущей версии добавим такую функцию удаления.
  4. Like
    Дмитрий Кондин получил репутацию от Doka в Обновление 2.8.2   
    Сначала обновить 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)
  5. Like
    Дмитрий Кондин получил репутацию от Konstantin Nikolaevich в Обновление 2.8.2   
    Сначала обновить 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)
  6. Like
    Дмитрий Кондин получил репутацию от XTRO в Начинаем защищать авторское право   
    http://www.youtube.com/watch?v=2L9_Tmxg5jY
  7. Like
    Дмитрий Кондин изменил репутацию tazam в Начинаем защищать авторское право   
    хорошая идея , и как сказали ораторские способности придут с опытом ! ставлю лайк 
  8. Like
    Дмитрий Кондин получил репутацию от Konstantin Nikolaevich в Начинаем защищать авторское право   
    http://www.youtube.com/watch?v=2L9_Tmxg5jY
  9. Like
    Дмитрий Кондин получил репутацию от Realtor в Главное меню: поменять цвет.   
    В хроме можно быстро определить какой стиль применить, если нажать на элемент правой кнопкой и там нажать Просмотр кода элемента, внизу появится информация нужная.
  10. Like
    Дмитрий Кондин получил репутацию от hovasan в Добавить кнопку для зарегистрированных пользвоателей   
    В настройках есть параметр
    В личном кабинете доступна галочка спец.предложенийenable_special_in_account Включите ее и будет как вы хотите.
  11. Like
    Дмитрий Кондин получил репутацию от hovasan в Не приходят уведомления о заявках на почту   
    Что стоит в настройках в поле system_email ?
    Также нужно проверить отправку почты с сервера в обход движка, для этого в корне сайта создаем скрипт test-mail.php
    <?phpfunction _mail ($from, $to, $subj, $what){mail($to, $subj, $what, "From: $fromReply-To: $fromContent-Type: text/plain; charset=windows-1251Content-Transfer-Encoding: 8bit");}$from = 'from@site.ru';$to = 'to@newsite.ru';_mail($from, $to, "Проверяем почту", "Попробуем отправить письмо");?> Замените адреса $from и $to на нужные, причем так чтобы они были разные и $from был вида "info@ваштестируемыйсайт.ru", а $to - уже тот адрес куда будут приходить уведомления, например "vasya@mail.ru".
    Теперь запускаем скрипт так:
    ваштестируемыйсайт.ru/test-mail.php и если письмо пришло, значит надо посмотреть настройки CMS Sitebill, если нет, значит проблема не в CMS, а в настройках PHP на хостинге. В этом случае пишем письмо в тех.поддержку хостинга вашего сайта с описанием проблемы и ссылкой на тестовый скрипт.
  12. Like
    Дмитрий Кондин получил репутацию от XTRO в Не прикрепляются фотки к обьявлению   
    В новой версии будет новый тип загрузчика, он построен по другой технологии и там будет мультизагрузка и нет привязки к флеш, думаю это уменьшить количество глюков.
  13. Like
    Дмитрий Кондин получил репутацию от XTRO в maskedinput.js и мобильные броузеры   
    На мобильных маску ввода еще не тестировали, попробуем найти адаптивные библиотеки.
  14. Like
    Дмитрий Кондин получил репутацию от Chernetskiy в Предложения для будущих версий.   
    Думаю надо сделать отдельную ветку в форуме.
    Там будет каждая новая фича отдельным топиком. Если пользователю интересна эта фича, то он там пишет +1, в результате тема которая интересна большему количеству появится в новой версии.
  15. Like
    Дмитрий Кондин изменил репутацию Realtor в предложения закладка Избранное   
    Предалагаю сохранять вкладку Избранное в виде html или pdf с активными ссылками, с последующей пересылкой клиентам компании (покупателям, арендаторам). Это будет офертой или акцептом для потенциальных клиентов обратившихся в компанию. Т.е. при обращении клиента сотрудники агентства через поисковую форму ищут объекты удовлетворяющие условиям клиента, получают отфильтрованную таблицу, потом уже в отфильтрованной таблице ищут уже более детально вручную объекты и вводят их в закладку Избранное. После формирования таблицы в Избранное, сохранают ее и отправляют потенциальным клиентам.
  16. Like
    Дмитрий Кондин изменил репутацию Антон Леонидович в Панегирик разработчикам и тех. поддержке. :-)   
    Огромное спасибо всем, кто входит в команду CMS Sitebill, разработчикам и группе технической поддержки! Благодоря Вашим усилиям есть возможность пользоваться очень качественным, доступным для каждого продуктом и наверное лучшим движком для сайта недвижимости. Особое уважение вызывает группа технической поддержки за оперативность и профессионализм. Так держать!
  17. Like
    Дмитрий Кондин получил репутацию от TopRaN в Применение различных шаблонов страниц   
    Вы тут уже решили этот вопрос?
    http://www.etown.ru/s/topic/597-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD-%D0%BD%D0%B0-%D0%B2%D1%81%D1%8E-%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83-%D0%B4%D0%BB%D1%8F-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86/
    Пожалуйста, пишите в одну тему однотипные вопросы.
  18. Like
    Дмитрий Кондин изменил репутацию XTRO в SEO и все что сним связано...   
    Ни одна из страниц не отдаёт Last-Modified.
    Думается надо добавить в TODO.
  19. Like
    Дмитрий Кондин изменил репутацию Chernetskiy в Важное обновление system 2.8.1   
    А я-то думаю, чего у меня обновление с 10-го раза установилось...?
     
    А вообще, глядя на то, как мой сайт на Wordpress ежедневно пытаются взломать (получаю отчеты и блокирую IP), приходит на ум ряд моментов, которые стоит применить в CMS Sitebill:
    - изменить страницу входа в админу с http://my-site/admin на что-то иное, отличающееся от слова admin или administrator, это первые страницы, которые пытаются взломать;
    - не использовать в качестве имени администратора имена "admin", "administrator", это первое, что лезет на ум хакеру или роботу, на днях пароль к имени "admin" на моем сайте пытались подобрать 1280 раз;
    - изначально требовать сложный буквенно-цифровой пароль из 10 символов и более...
    - использовать сложную капчу, хотя похоже ломается любая;
    - желательна двухуровневая аутентификация, либо через подмену страницы входа, защищенную паролем (уже работает в Joomla), или через подтверждение пароля вводом полученного кода в SMS, либо через генератор вопрос-ответ, как например при использовании приложений для смартфонов "Bitrix OTP" (для 1С Битрикс) или "E-num" (для WebMoney)
    - внедрить настраиваемую блокировку IP при десятке неудачных попыток входа в админку, блокировка на сутки с уведомлением админа по e-mail и указанием IP взломщика, для принятия решения администратором и внесения IP в карантин или в черный список, на всегда. Например для Wordpress есть соответствующий модуль Wordfence Scan, который позволяет делать это и не только, хоть целиком доступ из определенной страны заблокировать можно. Попутно, модуль проверяет файлы Wordpress и установленных плагинов на подмену (сравнивая с официальными файлами разработчика), имеет кучу гибких настроек автоматических действий и предупреждений, настраиваемую систему мониторинга и защиты, вплоть до полной блокировки доступа на сайт в случае DDOS атак.
     
    При существующем варианте "защиты" в Sitebill, нельзя быть уверенным, что в вашем сайте уже не пасутся хакеры... А спустя неделю-полгода случайно обнаружить свой сайт в списке блокировки как распространителя СПАМа или участника DDOS атаки...
  20. Like
    Дмитрий Кондин получил репутацию от Realtor в Важное обновление system 2.8.1   
    Провели серьезный аудит безопасности кода ядра CMS.
    Обнаружили несколько уязвимостей и исправили их.
    Настоятельно рекомендуем всем обновиться до версии system 2.8.1
  21. Like
    Дмитрий Кондин получил репутацию от OXYGEN в Доступ для агенств в админку   
    Для агенства можно открыть личный кабинет на сайте, не запуская в админку.
    Но если сильно охота запустить в админку и при этом не давать доступа к другим функциям, то нужно подождать обновления, сейчас это у нас в разработке еще.
  22. Like
    Дмитрий Кондин изменил репутацию Realtor в Активация объявления   
    Необходимо автоматически активировать объявления по аренде, которые были деактивированы после сдачи в аренду объекта.
    При деактивации в поле "Сдано до"  вписывается дата до какого сдан в аренду объект недвижимости.
    Теперь вопрос - подскажите написания или встройте в биллинг функцию активации таких объектов, которая  раз в сутки будет проверять условие  сравнения дат "Сдано до" =>date() и если удовлетворяет этому условию, то активировать объявление.
  23. Like
    Дмитрий Кондин получил репутацию от Лина в Проблема в слайдере Шаблон Realia   
    В файле http://realty-nvrsk.ru/template/frontend/realia/css/realia-blue.css
    Вот так сделайте
    .carousel .carousel-next { -webkit-transition: opacity 0.2s linear, background-color 0.2s linear; -moz-transition: opacity 0.2s linear, background-color 0.2s linear; -o-transition: opacity 0.2s linear, background-color 0.2s linear; transition: opacity 0.2s linear, background-color 0.2s linear; background-color: #06a7ea; background-image: url("../img/arrow-right-white.png"); background-position: center center; background-repeat: no-repeat; background-size: 8px 11px; cursor: pointer; height: 40px; margin-top: 10px; padding: 0px; position: absolute; right: 15px; text-indent: -9999px; top: 50%; width: 40px; z-index: 80} Поменял z-index: 999 на z-index: 80
     
    И это тоже
    .carousel .carousel-prev { -webkit-transition: opacity 0.2s linear, background-color 0.2s linear; -moz-transition: opacity 0.2s linear, background-color 0.2s linear; -o-transition: opacity 0.2s linear, background-color 0.2s linear; transition: opacity 0.2s linear, background-color 0.2s linear; background-color: #06a7ea; background-image: url("../img/arrow-left-white.png"); background-position: center center; background-repeat: no-repeat; background-size: 8px 11px; cursor: pointer; height: 40px; margin-top: 10px; padding: 0px; position: absolute; left: 15px; text-indent: -9999px; top: 50%; width: 40px; z-index: 80}
  24. Like
    Дмитрий Кондин изменил репутацию XTRO в [Ошибка] редактирование сетки   
    логику ошибки я понял сразу, (имхо) кнопку сохранения грида сделать disable пока не будет добавлено хотя бы одно поле.
  25. Like
    Дмитрий Кондин получил репутацию от t707722 в Форма поиска на выбранных страницах   
    Находим в шаблоне (main.tpl) вот такую строчку
    {include file="search_form.tpl"} Добавляем условие
    {if $main_file_tpl == 'realty_grid.tpl'}{include file="search_form.tpl"}{/if} Теперь форма поиска будет выводится только когда есть таблица объявлений, а на других страницах не будет подключаться эта форма.