Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

25 марта 2011 г.

PHP: Проверка URL-адреса

Задача: необходимо проверить на валидность и существование URL, который отправляется пользователем через форму на сайте.

Для решения этой задачи написал простую функцию проверки, которую собственно и привожу ниже:

/**
     * Функция проверки URL
     *
     * @param  string $url
     * @return boolean
     */

    function checkUrl($url) {
  
        if (empty($url)) {
            return false;
        }        

        // проверяем строку на присутствие в ее начале 
        // протокола (http://|ftp://)
        if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
            $url = "http://" . $url;
        }

        // проверяем строку на присутствие в ней         
        // валидного URL'а
        if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) {
            // далее проверяем URL на существование...
            // нет необходимости полностью загружать сайт,
            // поэтому проверям только заголовки 
            return @get_headers($url);
        }

        return false;
    }

18 января 2011 г.

ELGG: расширение функции поиска пользователей

Стандартная процедура поиска пользователей выдает результаты  исключительно по полям username (имя пользователя) и user (псевдоним пользователя). Для большинства проектов такого функционала не достаточно. Каждый пользователь может иметь огромное количество метаданных (например если использовать модули для увеличения количества полей в профайле).
Таким образом возникает задача поиска искомых выражений в метаданных объекта пользователя.

На форуме сообщества ELGG, в большинстве случаев, предлагают переопределять функцию стандартного поиска на свою, и туда уже добавлять дополнительные условия для поиска пользователей. Такое решение будет достаточно простым и не трудоемким, но переопределение стандартных функций может привести к конфликту при работи с другими модулями и плагинами. Поэтому и возник вопрос не о замене функционала поиска, а об его надстройке.

Поразбиравшись со средствами ядра, разобравшись с принципом работы хуков и триггеров, выяснилось, что ELGG обладает достаточно удобными средствами для надстройки процедуры поиска.

В системе уже зарегистрирован хук для поиска по метаданными, которые относятся к стандартным полям профиля (функция search_tags_hook). 

Регистрируем новый хук:
register_plugin_hook('search', 'tags', 
                     'mp_search_metadata_hook');

По-умолчанию, название доступных для поиска метаданных находяться в массиве $CONFIG->registered_tag_metadata_names, поэтому нам достаточно занести в этот массив имена полей метаданных, по которым необходимо совершать поиск.

Функция поиска по метаданным будет иметь следующий вид:

/**
 * Return default results for searches on metadata.
 *
 * @param unknown_type $hook
 * @param unknown_type $type
 * @param unknown_type $value
 * @param unknown_type $params
 * @return unknown_type
 */

function mp_search_metadata_hook($hook, $type, $value, $params) {
    global $CONFIG;
    $CONFIG->registered_tag_metadata_names = array("поле1","поле2",*...*);
   }

30 ноября 2010 г.