Контакты в профилях (см. UPD РЕШЕНО)

Многие пользователи при указании своих контактов — ссылка на ЖЖ, ВКонтакте и т.д. к сожалению указывают полную ссылку на свою страницу, а это, соответственно приводит к ошибке в данных о пользователе. Т.е. вместо нормальной ссылки
http://vk.com/IDпользователя
в его профиле возникают дикие
http://vk.com/http://vk.com/ID
.
Пытался думать в сторону регулярных выражений, но умения не хватает. Может подскажите, что можно предпринять для предотвращения этих косяков при заполнении профиля и/или при выводе инфы?

UPD: Ту в личку меня любезно проконсультировали по регуляркам и подсказал способ хака. Увы, при этом мы лезем в движок, но лично я уже давно в него залез и на обновления особо не рассчитываю. Проверю решение, отпишусь позже.

Решение (проверено работает):
Один из способов решения предложил AlikMis :

1. Открываем файл \classes\modules\user\entity\Field.entity.class.php
2. Находим
/**
			 * Грязный хак сайта в профиле (
			 * @todo Сделать валидацию полей в профиле
			 */

Сразу после этого вставляем
$sReturn=str_replace('http://vk.com/http://','http://',$sReturn);

Переведу на русский. Таким образом мы в функцию, возвращающую, значение поля профиля пользователя добавляем php-функцию str_replace(), которая проверяет адрес ВК и если надо, то меняет её. К сожалению, в базе при этом всё равно неправильный адрес, но подобную же функцию можно добавить в функцию записи пользователя. Ещё одним минусом является то, что теперь следует помнить об этих изменениях при обновлении движка (Лично у меня таких хаков накопилось уже порядочно).

13 комментариев

avatar
Мне кажется это надо исправить в самом релизе, ведь и в правду абсолютно не понятно.
avatar
Может быть, может быть, но мне пока хочется у себя это проделать. ))
avatar
Поддерживаю автора… У самого на сайте народ так вставляет ссылки на свои страницы в итоге белиберда полная получается…
avatar
В топике решение.
avatar
В поле ввода сделать подсказку что вводить типа [ваш id]
  • ARM
  • +1
avatar
Это как вариант, но лично я считаю, для пользователя должно быть все максимально просто, его не должно волновать что туда ввести или ID или ссылку полностью, это должно стать проблемой системы, она должна сама уметь разделять, если ввели ID хорошо, если ссылку полностью (http://vk.com/ID), то нужно заставить систему обработать и такой вид ссылки… только как? :) не программист, я не знаю… :)
avatar
Согласен на все сто. Ниже, кстати, решение.
avatar
\classes\modules\user\entity\Field.entity.class.php

находим
/**
* Грязный хак сайта в профиле (
* @todo Сделать валидацию полей в профиле
*/

и расширяем «Грязный хак» следующей строкой (для тех кто с контакта уточню — вставляем после строк, указанных выше)
$sReturn=str_replace('http://vk.com/http://','http://',$sReturn);
avatar
тогда можно ввести адрес не вконтакта.
предлагаю
$sReturn=str_replace('http://vk.com/http://vk.com/','http://vk.com/',$sReturn);
avatar
а сможете подсказать как добавить условия валидации и для остальных соц.сетей? Хотя бы на примере Facebook. Я несколько нуб в этих вопросах и смотря на правило обработки ссылок вк совсем не понимаю как их добавить. Нужно написать ещё одно условие после оператора if?
avatar
это не условия валидации, а грязные хаки. у вас та же проблема?
avatar
да, проблема та же. ваше решение с ВК помогло, но есть и другие социальные сервисы, пользователи и их тоже указывают неверно
avatar
для вб что-то вроде этого:
$sReturn=str_replace('http://facebook.com/http://facebook.com/','http://facebook.com/',$sReturn);
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.