пятница, 26 марта 2010 г.

Модуль массового импорта данных

Для заполнения справочников и массового импорта анкетных данных (не в соц.сеть, но в смежный проект) открыла для себя модуль Node Import
С его помощью таксономия и пользователи отлично импортировались.
Пришлось поработать напильником с импортом данных для модуля Content Profile, т.к. Node Import по ему только известной причине не импортировал корректно CCK поля с датами, e-mail адресами и просто текстом. Ноды с типом profile Node Import создал, и на том спасибо.
Пришлось выкладывать данные в отдельную таблицу, и из нее "дергать" данные, обновлять ноды и получать нужный результат.

В целом - хороший модуль, только вот сыроват немного.

Грабли с справочниками

Когда мы только-только запускали сеть, решили что справочник городов пользователи будут пополнять сами, если не найдут то, что нужно.
Через весьма короткий промежуток времени в справочнике было по 4-5 названий на каждый крупный город (старое название, новое название, короткое название, английский вариант и т.д.), из-за чего при поиске "себе подобных" возникало множество проблем.
Привести в порядок справочник оказалось весьма трудоемким по времени занятием, поскольку пришлось фактически вручную выяснять, как еще можно обозвать уже однажды забитый в справочник город.

Дальше - больше. Аналогичным образом пополнялся справочник университетов - автозаполнением пользователями. Читающим эти строки: никогда не делайте подобного. Найдите список университетов вашей страны, добавьте контакты для предложений новых значений и не позволяйте пользователям самим забивать значения, иначе бардак и анархия вам гарантированы. У нас ушел почти целый рабочий день на приведение в соответствие к единому стандарту справочник с 1000 значениями.

ЗЫ: Остались еще автозаполняемые справочники компаний и школ. Пока оставим их как есть. )

понедельник, 8 февраля 2010 г.

Taxonomy в типе данных списка интересов

При создании сайта мы особо не думали про то, какой будет тип поля "увлечения", "любимые книги", "часто бываю" и т.д. Поставили текстовое поле, и зря, как выяснилось. ;)
Появилась потребность автоматизировать поиск "похожих" людей, людей, со схожими интересами, одинаковыми любимыми книгами, фильмами, и чтобы выводить все это в едином списке: например: "4 совпадения по книгам, фильмам с пользователем Имярек".

Возникла интересная задача - как разобрать и закешировать всю информацию, что пользователи о себе в этих полях ввели, отбросив окончания, очепятки, предлоги и местоимения.
После разбора данных появилась другая задача - как обезопасить поиск по введенным пользовательским данным.
А потом и третья, как сделать так, чтобы все это работало сразу: только поменял профиль и можешь искать себе подобных.

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

Был написан модуль и (хвала 5 mysql) хранимые процедуры с триггером. Триггер отвечает за вызов хранимой процедуры, хранимая процедура кеширует данные, модуль занимается отображением. И все довольны, от админа до пользователей.

Таксономия - отличная штука. Очень советую не наступать на наши грабли ;)