Архив рубрики ‘PHP’

“Не-не” отрицательный php-хинт

Понедельник, 15 октября 2007

Сейчас занят запуском одного блога на игровую тематику, а так же пошли уже первые клиенты с курса Сергея Жуковского, что радует. Практикуюсь в быстрой и качественной настройке WordPress.
Чтобы вы не скучали напишу небольшой php-хинт, который, мне кажется, понравится изучающим этот язык. Во всяком случае мне он показался забавным и не лишённым изысканности)


Кто из вас не встречал подобный php-код?

function foo( $foo ) {
    // тварим чудеса
    if ( $foo ) // $foo не булевое значение
        return true;
    else
        return false;
}

Всё очень просто - требуется вернуть булевое значение (true/false), только проблема в том, что сама переменная $foo не обязательно булевого типа, поэтому нельзя вернуть её напрямую.

Вариант 1, приводим его к булевому значению

function foo( $foo ) {
    // фокус-покус
    return (boolean) $foo;
}

Вариант 2, приводим его к булевому значению (укороченный вариант)

function foo( $foo ) {
    // фокус-покус
    return (bool) $foo;
}

Вариант 3, двойное-отрицание!!!

function foo( $foo ) {
    // фокус-покус
    return !!$foo;
}

Первое отрицание (оператор не - !) приводит $foo к отрицательному булевому значению, т.е. false, а следующее “не” переворачивает уже к изначальному значению, но в булевом виде).

И напоследок - не сложно догадаться, что если вам нужно вернуть true, когда передаваемая переменная false, то убираем одно “не”:

function foo( $foo ) {
    // вуаля
    return !$foo;
}

Вот и всё, надеюсь вам понравилось;-)

10 вещей, которые вам стоит знать о WordPress 2.3

Понедельник, 24 сентября 2007

Если кто не в курсе, то уже вот-вот будет релиз новой ветки WordPress, под номером 2.3. Уже можно скачать первый релиз кандидат.

Так что же нового ждёт нас в очередной версии популярного блог-движка?
На этот вопрос довольно обширно ответил Аарон Бразелл в своём посте. Некоторые моменты показались мне интересными, поэтому решил сделать перевод, но не судите слишком строго - он не дословный.


10 вещей, которые вам стоит знать о WordPress 2.3

У нас существует традиция публиковать информацию для пользователей WordPress перед глобальными релизами. Так как релиз WordPress 2.3 намечен на 24 Сентября 2007 года, резонно было бы, следуя традиции, изложить 10 вещей, которые вам стоит знать о WordPress 2.3. Несмотря на это многие вещи останутся не раскрытыми в этой статье, поэтому если вы разработчик, то просто исследуйте код и найдите те самые новые перехватчики событий (hooks) и функционал, который мы встроили.

Тэги

Да-да, наконец то мы внедрили тэги. Долгое время мы их обещали и, как мне кажется, они всё ещё не идеальны, но то что они хороши - это точно.
Работа с тэгами теперь встроена в WordPress и это можно заметить по интерфейсу. Хотя на самом деле этот самый интерфейс для работы с тэгами довольно скромен - всего лишь поле формы под окном создания сообщения, в котором вы пишете тэги через запятую. Такой подход призван усилить осознание того, что тэги не содержат иерархии.

Наблюдательный пользователь отметит, что нет никакой возможности изменять эти тэги, управлять их списком или удалять. Просто хочется сказать, что уже существуют плагины, добавляющие возможность управления тэгами, и команда разработчиков целенаправленно заняла позицию “подождём-увидим”. Не слишком логично добавлять кучу элементов в UI, чтобы потом выяснить, что они оказались излишними или редко используемыми. Вместо этого они решили подождать и посмотреть какие плагины станут популярными, а потом возможно интегрировать их в будущих релизах.

Позвольте перечислить некоторые изменения, которые появятся после появления тэгов:

  1. Таблица терминов - Для разработчиков, теперь появится новая таблица wp_terms. Эта таблица подстановок, которая связывает термины между категориями, тэгами и закладками. В предыдущих релизах, таблица wp_categories была разделена между категориями и закладками, и эта таблица вызывала затруднения во время новой разработки, поэтому, учитывая что в WordPress 2.2 не было тэгов, всё было переделано с 0 для WordPress 2.3.
  2. Новые API для тэгов и терминов - Разработчики плагинов будут благодарны наличию нового API, которое неизбежно появится для всех нововведений. Обратите внимание на wp-includes/taxonomy.php, если вас интересуют новый функционал API. Помните, что API скорее всего затрагивает не только работу с тэгами, но я в этом не уверен. Вероятнее всего, что API взаимодействует как с категориям, так и с API ссылкок/закладок/блогрола в том числе. Если ваши плагины до этого работали с этими API, то стоит проверить - работают ли они всё так же, как и до этого.
  3. Новые тэги для шаблонов - Вообще то, появилось не так уж и много новых тэгов для шаблонов, которые оперируют с выводом тэгов, но тем неменее дизайнеры тем для WordPress должны о них знать и применять в своих темах, по мере необходимости. Блоггеры, не бойтесь изменять свои темы, чтобы использовать все эти функции, с другой стороны, вы возможно захотите подождать и скачать уже обновленную под WordPress 2.3 тему, до установки нового движка.
    Наверное документация по новым функциям появится не сразу, поэтому стоит заглянуть в wp-includes/category-template.php, чтобы посмотреть какие аргументы они принимают (хотя похоже, что вообще никакие аргументы не требуются):

      wp_tag_cloud();
      get_tag_link();
      get_the_tags();
      get_the_tags_list();
  4. Импорт тэгов из:
  • Плагин Ultimate Tag Warrior
  • Плагин Jerome’s Keywords
  • Плагин Simple Tags
  • Плагин Bunny’s Technorati Tags
  • WordPress категории

Напоминания об обновленияъ

wordpress 2.3 update notification
Напоминание об обновлениях - фишка, которую все давно просили реализовать в WordPress, и наконец-то это было сделано - и даже не один раз, а дважды. Теперь WordPress может сообщать вам о новых доступных версиях движка, а так же о новых версиях плагинов. И я считаю эту особенность очень клёвой.

wordpress 2.3 plugin update

Классический редирект

Долгое время это было шилом в заднице каждого вебмастера. Классические УРЛ рассматриваются Google и другими поисковыми системами по разному в зависимости от того указан адрес с www или без. Поисковики видят в них две разных страницы и наказывают одну из них за копирование контента.
Чтобы избежать этого, многим вебмастерам и блоггерам, в том числе и мне, приходилось вводить редиректы с одной версии на другую. В моём случае я перенаправлял www версию на не-www. Теперь WordPress сам занимается этим, в зависимости от того какую версию сайта вы укажете основной в Options > General page. По сути, это мгновенное улучшение SEO для всех пользователей WordPress 2.3.

Улучшения в процессе написания постов

Вот ещё две востребованных функции - улучшенное управление черновиками, а так же более удобный процесс написания сообщений для не редакторов, и не администраторов. В то время как второй пункт сто крат лучше того что был прежде, первый продвинулся в нужном направлении, но всё ещё “оставляет желать лучшего”.
Управление черновиками улучшено за счёт добавления серии выпадающих меню в верху страницы Управление (Manage). Из этого списка вы можете быстро выбрать пост, который ещё находится в черновике. Это избавит вас от ссылок на посты в черновике, которые обычно располагались вверху страницы. Если вы один из тех блоггеров, кто хранит не мало постов в черновике на “чёрный день”, или просто начинаете писать пост, а затем сохраняете в черновик, чтобы поработать с ним позже, то вам должен быть знаком “Черновой АД”, когда многострочные ссылки громоздятся вверху страницы и становятся бесполезными из-за своего количества. Теперь же в списке находятся всего два черновика и ссылка “and more…”, ведущая на отдельную страницу, где перечислены все посты, находящиеся в черновике. В эстетическом плане - всё здорово, но всё же мне кажется, что можно придумать нечто более интересное и удобное.
Второй пункт касается процесса управления постами “ожидающими одобрения”. Это большой плюс для блогов с нескольким количеством авторов, где блоггер со статусом “Автор” не имеет прав публиковать запись без одобрения. К сожалению, в предыдущих релизах WordPress, администраторы или редакторы должны были внимательно отслеживать появление подобных постов, которые потом нужно было одобрить. Теперь же об этом приходит уведомление. Это отличное, хоть и запоздалое нововведение.

Настраиваемая Доска объявлений

Если вам надоели тонны ссылок от WordPress и Technorati на вашей Доске объявлений (dashboard) и вам хотелось сделать её всё же более полезной для себя, то команда разработчиков позаботилась об этом, добавив возможность настройки Доски объявлений при помощи некоторых перехватчиков событий.
Мы уже применяем это в b5media, чтобы выдавать блоггерам более релевантные фиды, а так же заменили источник для “Входящих ссылок” с Technorati на Google Blog Search. И это не обсуждается!

$wpdb->prepare()

Фича которая сведёт хардкорных разработчиков с ума, это ещё-не-применяемый-но-уже-работающий метод, добавленный в класс базы данных. prepare() метод - удобный маленький метод, который помогает выявить попытки SQL-инъекций, до того, как они будут выполнены, что позволит создавать безопасный SQL код. Как я уже говорил, функция пока что не пременяется в WordPress, потому что разработчикам не хватает времени переделать всё к релизу WordPress 2.3. Официально она будет внедрена в WordPress 2.4, но я подумал, что ничего не случится, если я расскажу о ней, учитывая, что код уже добавлен в релиз (не стоит забывать о возможной модификации к моменту официального релиза WordPress 2.4)

Atomlib

Atomlib - относительно недавно добавлен в WordPress 2.3. Библиотека была создана великим Сэмом Руби, который повлиял на создание спецификации Atom-фидов и Atom Publishing Protocol. Atomlib предоставляет возможность применять в WordPress все возможности Atom - Atom Publishing Protocol и Atom фиды версии 1.0. Так как это самобытная библиотека, то её потенциал легко применять при разработке новых функций и плагинов, просто добавив несколько строк кода.

Устаревшие функции

Не существенная проблема, потому что я не видел особого применения этих функций среди пользователей WordPress. Но раз уж в новом релизе будут новые функции, то я должен сообщить о тех, которые окажутся устаревшими. В WordPress 2.3 только две функции попадают в раздел устаревших - и обе связаны с пермалинками (permalinks). Первая функция - permalink_link(), применяемая в шаблонах, заменена на the_permalink(). Мне кажется, что в большинстве примеров по созданию тем для дизайнеров и так уже давно применяется the_permalink(), поэтому особо ничего не изменится. Вторая функция - permalink_single_rss() ушла в раздел устаревших и на её место пришла функция the_permalink_rss().
Как обычно и бывает с устаревшими функциями, они будут продолжать работать как и раньше. Но по новым стандартам желательно избавиться от их появления в коде и заменить на нужные аналоги.

Виджеты множественных категорий

С введением тэгов и терминов, появилась возможность создавать различные “группы” категорий, организованные по различным признакам. Для этого, виджет Категории был расширен, чтобы позволить внедрять виджеты множественных категорий. Не скажу, конечно, что эти виджеты такие уж полезные, но кто-то может захотеть применить их в своём блоге.

Подключаемая RSS библиотека

Внедрение и использование Magpie как RSS-библиотеки в WordPress, вызывало большое раздражение в среде разработчиков.
Мы в b5media, к примеру, считаем SimplePie намного более интересной и лучше поддерживаемой библиотекой (разработка Magpie закончилась уже довольно давно). Но ведь могут быть и другие RSS библиотеки. Поэтому, в WordPress появится возможность подключать и применять библиотеки на своё усмотрение.
Для этого существует новая функция load_feed_engine, позволяющая авторам плагинов загружать различиные движки для разбора фидов. Мне кажется, что это очень интересная и полезная особенность. Её не обязательно использовать, но между тем теперь у вас есть выбор.

В WordPress 2.3 появится множество хороших нововведений. Естественно они не идеальны. Личная рекомендация - не рвитесь сразу же ставить себе новую версию. Всегда остаётся возможность что, что-то пойдёт не так, поэтому позаботьтесь о бэкапе заранее. Хорошим решением будет подождать пару недель, пока авторы плагинов не проверят их и не выложат новые версии. Естественно, что чем меньше плагинов у вас стоит, тем проще вам будет перейти на 2.3, но это зависит от личных предпочтений. И подводя итог, как мне кажется релиз получится очень цельным.


Сегодня, по идее день релиза, но информация между тем всё так же актуальна.
В дополнение к посту советую прочитать статью Максима о работе с облагом тэгов в WordPress 2.3

Улучшаем размещение SAPE на форумах PHPBB

Пятница, 21 сентября 2007

Прошёл тестовый переод работы нового метода размещения ссылочных блоков SAPE на многострадальном форуме.
Сейчас объясню в чём вообще заключается этот метод. Пообщавшись с тов. Forall с phpbbguru выяснил, что администрация SAPE высказала некое пожелание, о разнесении ссылочных блоков на форумах в разные места, чтобы поисковикам было сложнее определять сайты, с которых производится продажа, а следовательно и уменьшить вероятность попадания в непот (а вы уже слышали, что авто-непот постраничен?). После этого я и решил провести небольшую модернизацию способа размещения ссылок.
Теперь в футере ссылки можно расставлять так - как душе угодно, выбирая место и количество.
И, чтобы не нервировать честных зарегистрированных пользователей, ввел проверку на залогиненность - вошёл на форум под своим паролем - чистый блок ссылок, зашёл гостем (или если ты поисковик/краулер) - извольте наблюдать ссылки. Да, думаю это немного не честно и господа из Сапы за это по головке не погладят, но ведь мы же им не скажем? Так что тсссс…

Как и что нужно поменять, чтобы разместить ссылки в разных местах хедера/футера?

1. Открыть файл overall_header.tpl или overall_footer.tpl (хэдер и футер соответственно, думаю это понятно)
2. В нужных местах разместить блоки сапы. Читайте внимательно какие и как размещать.
Блок выглядет так {SAPEx}, где х - число ссылок, которое должно выводиться в этом месте. Т.е. если хочется, чтобы стояло 2 ссылки, то пишем {SAPE2}.
Учтите, что если на странице куплена всего 1 ссылка , то она выведется в первом блоке, а если ссылок больше, чем вы указали в числовых значениях, они всё равно будут выведены в последнем блоке {SAPEx}, какой бы вы x не указали.
3. Теперь открываем page_header.php или page_tail.php из директории include и, как и раньше, после строки global $do_gzip_compress; добавляем код

define('_SAPE_USER', 'ваш_длинный_но_важный_код');
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$sape = new SAPE_client();

4. Прокручиваем страницу вниз и перед строчкой

$template->pparse('overall_footer');

добавляем

if(($userdata['session_logged_in'] == 0) or (!isset($userdata['session_logged_in']))){
$footercode = file_get_contents($template->files['overall_footer']);
preg_match_all('#\{(SAPE([0-9]+))\}#is', $footercode, $varrefs);

for ($i=1; $ireturn_links(intval($varrefs[2][$i-1]));
	$template->assign_var($varrefs[1][$i-1], $sapelinks);
}

$template->assign_var($varrefs[1][$i-1], $sape->return_links());
}

надеюсь вам хватит воображения заменить footer на header, если вы решили размещать ссылки вверху

5. Проверяем.

Если хочется быть очень честными и показывать ссылки всем-всем-всем, то просто убираем первую строку

if(($userdata['session_logged_in'] == 0) or (!isset($userdata['session_logged_in']))){

и последнюю закрывающую скобку.


Да-да, знаю, что толку от этого не так много, как хотелось бы, потому что всё равно размещение ссылок ограничено верхом и низом форума, но как говорится “мы работаем над этим”. К тому же (идёя всё того же Forall), надо бы проверять длинну ссылок, чтобы не разъезжался дизайн и так далее.
В общем планов хватает. Подписывайтесь на RSS и следите за дальнейшими новостями.

Обзор плагина FireStats и русские поисковые системы.

Четверг, 20 сентября 2007

Ну что же, как я и обещал - буду ставить по чуть-чуть плагинов и описывать свои впечатления.
Первым был установлен плагин статистики FireStats.
Впечатления только положительные: считает визиты и посетителей, за всё время и 24 часа, ссылки-рефералы, поисковые запросы и кол-во переходов, а так же рейтинг страниц + статистика по пользователям (браузеры, страны, ОС).
Фильтрует ботов и краулеров по имени, причём можно добавлять их в ручную в настройках, так же есть фильтр по IP.

Что особо понравилось, так это то, что есть возможность исключать зарегистрированных пользователей из подсчёта (чтобы например не считать себя) + можно в сайдбар повесить виджет статистики.

Устанавливается без проблем, но вот немного разочаровало то, что список поисковиков ограничен изначально буржуйскими (Google, MSN, altavista, Ask, Exite, Alexa, Walla, Yahoo, AOL, Baidu, Lycos, HotBot, About), а хочется то статистику по нашим родным.
Немного возни в исходниках и добавил в определение поисковиков: Yandex, Aport, Rambler, WebAlta, mail.ru, Nigma.

И всё бы ничего, только они (черти) работают в Win-1251 кодировке, а в WP всё в UTF-8… Ещё немного кода и имеем перекодирование для нужных поисковиков и читабельность в статистике.

Если вы уже используете FireStats, то просто скачайте архив (firestats-rus-se.rar) и замените файлы из него. Я сохранил последовательность папок, поэтому всё должно встать без особых проблем. В архиве так же иконки к поисковикам)

Если будут какие-то проблемы и/или пожелания - прошу в комментарии.
Будет время возможно займусь переводом этого плагина, хотя в нём и так всё интуитивно понятно.

Как поставить SAPE на форум PHPBB

Вторник, 31 июля 2007

Изучая понемногу SEO, решил опробовать сервис ref=”http://www.sape.ru/” target=”_blank”>SAPE, но так как количество страниц в блоге не велико (а про PR и тИЦ, я вообще молчу), то решено было тестировать на многострадальном сайте гильдии Vault13, на котором уже давно действует форум, с посещаемостью в 150-200 человек в день.

Самого сайта пока что и нет, собственно говоря, а есть только индексная страница с ссылками на прочие сервисы (форум, дкп-таблицы и прочее). Сперва разместил код, полученный от SAPE, на главной странице, а потом стал думать - где и как встраивать код в форум.

Весь шаблон форума phpBB состоит из html-страниц, т.е. добавить в них php-код не получится. Заготовки страниц представляют собой голый html с вкраплением шаблонных-элементов, вида {TITLE} или {T_BODY_TEXT}, в нужных местах.

Всё что от меня требовалось - определить в какую часть страницы - верх (overall_header.tpl) или низ (overall_footer.tpl) встраивать ссылки от SAPE (эти файлы можно найти в папке templates/название_темы/, если их нет, то скорее всего используются файлы - simple_header.tpl и simple_footer.tpl). Решено было добавлять их под информацией о создателях шаблона и копирайтах, поэтому в файле overall_footer.tpl появился вот такой код:

Blizzard Entertainment, Inc. в США и/или других странах.
{SAPE}

После чего осталось лишь добавить обработку SAPE-скрипта и передачу его в {SAPE}-тег шаблона.
Следовательно идём в папку includes форума и ищем файл page_header.php для overall_header.tpl и page_tail.php для overall_footer.tpl.

В самом начале соответствующей страницы, сразу после строчки содержащей $do_gzip_compress ставляем следующий код:

define('_SAPE_USER', 'очень_динный_персональный_номер');

require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');

$sape = new SAPE_client();

$sapelinks = $sape->return_links();

Теперь прокручиваем файл ниже в поисках строчки с $template->assign_vars(array( и добавляем последний штрих:

'SAPE' => $sapelinks

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

Теперь уже можно в панели управления SAPE добавлять свой сайт и ждать индексации. У меня проиндексировалось с первого раза 100 страниц, за первый день продал около 30 ссылок, со страниц 3-его уровня, учитывая то, что PR и ТИЦ у сайта вообще никакие.

Желаю всем удачи на поприще раскрутки и обогащения на форумах.