В стандартную доску объявлений добавил функциональность, которая позволяет привязать объявление к географическим координатам - добавил скрытые поля, которые заполняются по клику на карте. После того, как пользователь жмёт "Сохранить", нужно эти координаты перевести в имя страны и сохранить это имя в БД.
Подскажите, пожалуйста, как это лучше всего сделать
PS: Поискал по форуму. Кое-чего нашёл, но везде тема раскрыта не до конца.
Юрий Анатольевич пишет: В стандартную доску объявлений добавил функциональность, которая позволяет привязать объявление к географическим координатам - добавил скрытые поля, которые заполняются по клику на карте. После того, как пользователь жмёт "Сохранить", нужно эти координаты перевести в имя страны и сохранить это имя в БД.
А какие данные получаются при клике? ID города или название?
Я написал функцию, которая определяет по широте и долготе страну. Вернее, её ISO код. Вот именно этот ISO код и хочется сохранять для каждого объявления.
Я написал функцию, которая определяет по широте и долготе страну. Вернее, её ISO код. Вот именно этот ISO код и хочется сохранять для каждого объявления.
Тогда сохраняйте эти 2 поля в БД, а вот на счет нахождения города по координатам точно не скажу, может быть база есть с такими данными, или посмотрите API карт, возможно там будет. Если нет придется забивать ручками по каждому городу.
Мне нужно хранить и географические координаты и имя страны. Это нужно для поиска. Поиск объявлений осуществляется 2-мя способами: по точке и радиусу (задаётся точка и радиус окружности в которую должны попасть все объявления); и по стране - поиск всех объявлений, которые заведены для выбранной страны.
В первом случае я буду использовать хранимую процедуру, которая будет мне говорить - отвечает объявление критерию попадания в круг или нет. Тут проблем нет. А вот во втором мне достаточно текстового сравнения, что сильно уменьшит нагрузку на сервер.
Т.е. что мне нужно сделать: Заполнить 3 поля - широта, долгота, страна. 2 из них я заполняю сразу, как пользователь ткнёт по карте. А вот для заполнения третьего мне надо, чтобы пользователь нажал "Сохранить". Вот я и хочу выяснить, где это место, которое получает данные из формы и сохраняет. Чтобы в это место добавить ещё одно поле - страну, которую я вычислю с помощью моей функции.
Юрий Анатольевич пишет: Вот я и хочу выяснить, где это место, которое получает данные из формы и сохраняет. Чтобы в это место добавить ещё одно поле - страну, которую я вычислю с помощью моей функции.
Понял, какой компонент используете, или как вообще пишите?
Вот я и хочу выяснить, где это место, которое получает данные из формы и сохраняет. Чтобы в это место добавить ещё одно поле - страну, которую я вычислю с помощью моей функции.
Понял, какой компонент используете, или как вообще пишите?
Использую стандартную доску объявлений битрикса, которая лежит в bitrx/content/board/
Я там не нашел использование карт при добавлении, видимо вы кастомизировали его. Если вы используете компонент то нужно его редактировать в component.php. для этого советую перенести в свое пространство имен. Если вы сами дописываете все то покажите код что ли.. я не телепат
Вообще, я пока новичок в битриксе и может очень многого ещё не понимаю. Но вот как я себе это всё дело представляю.
Я зашел в доску объявлений. Нажал добавить обявление. Запускается скрипт, который лежит в /content/board/my/index.php Всё что есть в этом скрипте - подключение компонента bitrix:iblock.element.add.
Потом я добавил в шаблон такую строку: print_r ($_POST); И увидел, как битрикс сохраняет данные из формы:
$_POST['PROPERTY']['34'][0] вот так передаётся строка.
Тогда я подумал, а почему бы не попробовать проинициализировать нужную мне переменную прямо в ПОСТе? Я добавил такую штуку перед вызовом инициализации компонента: $_POST['PROPERTY']['22'][0] = "Russia"; (соответственно добавил 22е поле в описание объявления). Попробовал сохранить новое объявление. В нужном поле ничего не появилось.
Я бы не рекомендовал переопределять ПОСТ, только если уверен на 100% и лень сделать нормально:
достаточно добавить обработчик события добавления(обновления) элементов инфоблока, там будут уже те поля, которые пользователь заполнил и через них можно будет сгенерировать необходимое поле. Кроме того будет бонус, при заполнение этих координат через админку битрикса, этот обработчик тоже будет срабатывать.
neytrino пишет: Я бы не рекомендовал переопределять ПОСТ, только если уверен на 100% и лень сделать нормально:
достаточно добавить обработчик события добавления(обновления) элементов инфоблока, там будут уже те поля, которые пользователь заполнил и через них можно будет сгенерировать необходимое поле. Кроме того будет бонус, при заполнение этих координат через админку битрикса, этот обработчик тоже будет срабатывать.
Мне очень нравится это решение. Вот только я не знаю, как добавить этот обработчик. Научи, а?