Год назад, когда PHP и API на uCoz уже прошли тестирование и стали доступны пользователям системы, я начал приглядываться к новым возможностям. Тогда я ещё не понимал, как API и PHP можно применить на сайте, чем они так полезны и почему многие пользователи системы так ждали этих возможностей. Особо интересных примеров функционала я не обнаружил на официальном форуме uCoz, поэтому никаких действий по использованию не предпринимал. К концу 2011 года был запущен конкурс идей и их воплощений, основанных на PHP, предоставляемом хостингом. Это был первый опыт по уяснению тех возможностей, которые даёт PHP для реализации различных задумок. Из всего списка представленных работ меня заинтересовала только одна работа "Авторизация через соцсети". Поэтому в конце декабря 2011 года я перешёл на новый тариф (с поддержкой PHP) и установил скрипт авторизации на сайт. Пожалуй, это была единственная реализация, которая была сделана довольно качественно и была действительно нужной. Это был мой первый шаг, за которым последовали собственные идеи и их реализации, о которых сейчас и пойдёт речь.
В поисках хорошего мастера, готового взяться за освоение возможностей PHP, API от uCoz и выполнение моих нетривиальных заданий, я почти сразу попал на веб-разработчика, известного на форуме uCoz как rsod. На него я вышел не случайно – мне посоветовал к нему обратиться автор скрипта "Авторизация через социальные сети", ныне являющийся сотрудником uCoz. Что же получилось от нашей совместной работы? Какие функции удалось реализовать? С какими проблемами столкнулись? Что позволяет сделать uCoz и чем он нас ограничивает?
Любой объект (материал) Справочной можно привязать к Яндекс-карте посредством ввода адреса и указания тега (название группы), в который должна быть организация. После того, как модератором отмечается организация на карте, под материалом Справочной выводится спойлер, в котором скрыта Яндекс-карта с меткой объекта. Помимо этого есть кнопка «Все организации», которая ведет на общую карту со всеми объектами по данному тегу. Под общей картой выводятся все теги, которые выполняют функцию фильтров для отображения конкретных объектов на карте. Все объекты, что мы видим на текущий момент на поле карты, отображаются в левой части от карты. Причём можно включить режим, когда будут показываться названия всех объектов, вне зависимости от того, на каком участке карты мы сейчас находимся. При нажатии на любой объект из списка, на карте автоматически ищется объект и выводится нужная точка. При нажатии на метку на карте мы увидим все названия организаций, расположенных по данному адресу. Тут же можно перейти в справочную для ознакомления с подробной информацией об организации.
Помимо фильтрации объектов на карте с помощью тегов, был разработан специальный поиск по Карте по названиям материалов и/или по адресам. Если посетитель сайта помнит только адрес, то он с лёгкостью найдет все находящиеся по данному адресу объекты или, если знакомо только название, то узнает адрес данной организации и увидит его на карте города. Поиск выводит не только точные совпадения результатов запросов, но и похожие, что может пригодиться на случай,если человек сделал опечатку в запросе.Учтён еще один важный момент, касающийся сохранения текущего положения карты, а также результатов фильтрации по тегам или поисковому запросу. Для этого есть специальная кнопка, называющаяся «Ссылка», при нажатии на которую предлагается сохранить адрес страницы с текущим расположением объектов на карте. Таким образом, пользователи сайта могут при необходимости обмениваться ссылками на карту, например, чтобы показать все «Образовательные учреждения» или все «Продуктовые магазины» города Королёва на карте.
Комментарий веб-разработчика
При создании данной функции очень не хватало API для записи напрямую в материал из PHP-скрипта. Для реализации данной функции пришлось собственноручно писать функции сохранения необходимых данных материала в дополнительную базу данных, хранимую на PHP-сервере. Это не очень удобно по причине того, что мы вынуждены делать дополнительный запрос как во время добавления материала, так и во время чтения. При этом во время добавления материала возможна такая ситуация, когда, например, пользователь закроет вкладку прежде, чем запрос успеет отправиться на сервер и в результате материал будет отредактирован, но не будут отражены изменения на карте.
Кроме того, здесь может быть полезна система вызова скриптов при определённых действиях. Например, при добавлении материала в каком-либо модуле вызывается определённый скрипт, путь к которому задаётся в панели управления. В этот скрипт передаётся ссылка на материал и он производит добавление его в дополнительную базу данных. А при удалении материала вызывается другой скрипт. При изменении - ещё один и так далее, в общем, удобная была бы функция, которая могла бы компенсировать отсутствие API для записи. Кроме того, подобная функция относительно проста в реализации и безопасна для сайта, в отличие от API для записи.
Принцип работы «Карты фотографий» практически идентичен работе «Карты организаций», единственное, что добавлены дополнительные модераторские функции по управлению добавляемыми пользователями объектами на карте (автоматическое создание тега «непроверенные фотографии», удаление объектов с карты и т.п.).
Комментарий веб-разработчика
Поскольку модули практически идентичные, а по большому счёту – это и есть скопированная карта организаций с незначительными изменениями, то и комментарии здесь аналогичны предыдущим.
Сразу же после добавления объявлений в разделы по недвижимости «Сдам» или «Продам» автору материала настоятельно предлагается добавить объявление на «Карту недвижимости». Если он этого не делает, то объявление помечается надписью «непроверенное объявление» и иконкой «внимание», при нажатии на которую выводится сообщение о том, что объявление сомнительного содержания и администрация сайта не рекомендует пользоваться данным предложением. При этом автор видит также ссылку с предложением исправить данную ситуацию. Это единственный способ, который заставляет недобросовестных посетителей сайта добавлять объявления с корректными данными.
Основным отличием «Карты недвижимости» от предыдущих двух карт является то, что для неё разработан многофункциональный фильтр, который позволяет выводить конкретные объекты недвижимости по их типу, цене, собственнику/агентству и т.д.
При удалении объявления о недвижимости происходит автоматическое удаление объекта с карты. По умолчанию срок хранения всех меток на карте – месяц. После чего они также автоматически удаляются. Таким образом, на карте выводятся только самые актуальные объявления.
К сожалению, в данной реализации есть один неприятный момент. Если авторы объявлений ставят срок размещения меньше месяца, то при автоудалении объявления сервером, карта "не знает” о данном событии. В связи с этим, на карте появляются битые метки, ведущие на страницу 404. Решение по данному вопросу не найдено.
Комментарий веб-разработчика
Здесь ощущается особо остро нехватка вызова скриптов по событиям или отсутствие выборки произвольного количества материалов за один запрос. И если удаление вручную ещё можно отследить, хоть и не в 100% случаев, то автоматическое удаление не отслеживается и не может быть отслежено вообще никаким образом.
В режиме редактирования материала в разделе «Справочная» появилась кнопка «Заметки», при нажатии на которую открывается окно с полем для текста, куда можно вписать и сохранить любой текст, необходимый для сопровождения справки о городской организации.
Комментарий веб-разработчика
Здесь всё просто и предоставляемых функций вполне хватает. Можно было бы конечно записывать заметку прямо в материал, и даже было бы правильнее, но тем не менее здесь можно и обойтись.
Под каждым материалом, где был создан опрос, выводится вопрос и варианты ответов. Можно просмотреть результаты или проголосовать. Результаты выводятся в графическом представлении с указанием процента проголосовавших и числа голосов.
Все новые опросы, созданные в разных разделах сайта, выводятся на общей странице городских опросов. Напротив каждого опроса указан заголовок темы, где был прикреплён опрос. На каждый опрос можно сохранить ссылку для быстрого перехода. Все новые опросы выводятся сверху, но при желании посетители сайта могут отфильтровать результаты вывода по количеству голосов или по участию в опросах (вывести те опросы, в которых посетитель сайта еще не голосовал) применительно к любому разделу сайта или ко всем сразу.
А как повысить «видимость» опросов на сайте? Для этого была сделана особенно полезная функция - копирование опроса в любой материал любого раздела сайта. При этом формат работы опроса полностью повторяет его работу в «корневом» материале: можно и голосовать и просматривать результаты (база голосов единая).
Это очень удобно для материалов, посвящённых одной и той же теме. (прим. разработчика: это на самом деле не копии опросов, а ссылки на один. Аналогию можно привести с файлом и ярлыком: файл (главный опрос) только один, а ярлыков может быть неограниченное количество, и при этом нет разницы, запускается ли ярлык или файл, так и здесь) Помимо этого, копировать опрос можно и на внешние ресурсы. Тогда на сайте ЮБиК фиксируются те сайты, на которых установлен код опроса и то количество людей, которые участвовали в голосовании с внешних доменов.Комментарий веб-разработчика
В общем, здесь всё то же самое: нужна система вызова скрипта по событию и запись в материал посредством Write API. Хорошо было бы иметь поле произвольной максимальной длины или возможность сделать несколько произвольных полей.
Комментарий веб-разработчика
Всё то же самое, что было описано в предыдущих разделах.
Разработана общая страница рейтинга организаций Королёва и Юбилейного, на которой можно увидеть самые популярные у населения организации.
Рейтинг можно посмотреть и для отельной группы организаций (сортировка по тегам, взятым из базы тегов «Карта организаций»). Например, можно отдельно посмотреть рейтинг «Образовательных учреждений» города. Сортировка организаций осуществляется по тегам, числу отзывов (оценок), рейтингу (самый высокий/самый низкий), тенденциям (приросту или уменьшению рейтинга за последние 3 месяца).Если модератор обнаружил некачественный отзыв (нецензурная лексика, неполные данные и т.п.), то при удалении комментария-отзыва автоматически удалится оценка (рейтинг организации вернётся к предыдущему состоянию). Примечательно, что реализована защита от накруток и недобросовестных пользователей (с одного ip можно оставить только один отзыв об организации, следующий - только через 30 дней).
Комментарий веб-разработчика
Здесь опять же очень сильно не хватает системы вызова скриптов по событиям. Также здесь не хватает возможности вставки результата выполнения PHP-скрипта прямо в шаблон, что позволило бы отделить простые комментарии от отзывов, при этом не потеряв возможность индексации и тех, и других.
Я хотел иметь реализацию функции по загрузке изображения в комментарии, её обработке, создания превью и прописывание домена yubik.net.ru на фото. Так, чтобы после добавления комментария под ним выводилось аккуратное превью фотографии. Все новые фотографии в комментариях можно было бы просмотреть на отдельной странице…
Важной составляющей ТЗ для веб-разработчика было условие, что фотографии в комментариях будут индексироваться поисковиками. Сначала были надежды эту непростую ситуацию разрешить, но, к сожалению, по этому вопросу столкнулись с непреодолимой трудностью и данная разработка «зависла в воздухе». Я и разработчик не смогли придумать «механизм», чтобы обойти «ограничения и отсутствие некоторых необходимых вещей» в системе uCoz.
Комментарий веб-разработчика
Здесь очень не хватает Write API и системы вызова скриптов по событиям. Кстати, странно, почему нет кода, выводящего идентификатор комментария. Из-за этого приходится буквально городить костыли, которых, к слову, и так немало.
После многократных попыток решить проблемы, можно сказать только одно: нужен хотя бы id, без него уникальная идентификация комментария практически неосуществима (прикрепление индексируемых фото невозможно)
В системе uCoz можно реализовать многое, что я и продемонстрировал, но порой сталкиваешься с непростыми ситуациями, и приходится придумывать сложные решения для казалось бы простых вещей. Но при этом однозначно можно сказать - в корне неправы те, кто заявляют, что система uCoz ограничивает и не даёт создать что-то уникальное и непохожее на других.
В целом, можно сделать четыре вывода:
- 1. PHP и API системы uCoz действительно полезная вещь! Можно реализовать, даже не смотря на ограничения, многие интересные проекты и для этого не нужно переходить на другой хостинг (в том числе, использовать другую систему управления сайтом).
- 2. Необходимо расширение функционала PHP и API системы uCoz. Это даст еще больше возможностей для воплощения самых инновационных идей!
- 3. Нужна стабильная работа PHP-сервера (сейчас приходится использовать асинхронный код загрузки для описанных проектов, чтобы в какой-то «нестабильный» момент не завис весь сайт). Но, стоит заметить, что на текущий момент сервер работает намного стабильнее, чем год назад.
- 4. Не хватает некоторых системных кодов
Вывод веб-разработчика
API для записи и вызов скрипта по событию катастрофически необходим.
Надеюсь, данный пост будет полезен сообществу uCoz, как пользователям, так и Администрации.
С уважением, администратор сайта yubik.net.ru