May 18

Совершенно случайно обнаружил, что у меня нифига не работает WP’шный плагин Subscribe to Comments, хотя раньше проблем с ним вроде не было. Проверка того “что не так” и исправление этого всего у меня заняла добрые два часа…

Сначала грешил на WP 2.5, несовместимость таблиц и прочее - нифига, в бд всё, что нужно есть, но вот только сам факт подписки на комментарий туда заноситься не хотел ну вообще никак. Debug показал, что обработчику subscribe’ов вместо данных, введенных в форму коммента приходит “пустота” - абсолютно пустой $_POST. Глянув в строку адреса - обнаружил там длиннющую строку со всякими не сильно понятными значениями. Что ж, смотрим $_GET…

После просмотра, стало понятно, в чем затык - виной всему был OpenID-плагин, который для аутентификации пользователя выполнял всякие редиректы на другие сайты, после чего поток управления возвращался обратно в WP, однако все POST-данные оказывались потерянными. Нужные, по мнению OpenID-плагина, данные передавались теперь через GET, но OpenID, к сожалению, ничего не знал о плагине Subscribe to Comments и никаких данных о том, подписался ли пользователь на текущий пост, не передавал.

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

Довольно быстро это место нашлось - функция comment_tagging в файле logic.php:

$this->start_login( $openid_url, '/wp-login.php', 'commentopenid',
  array(
    'wordpressid' => $comment['comment_post_ID'],
    'redirect_to' => get_permalink( $comment['comment_post_ID'] ),
  )
);

Добавляем сюда нужные нам поля, а именно поле subscribe:

$this->start_login( $openid_url, '/wp-login.php', 'commentopenid',
  array(
    'wordpressid' => $comment['comment_post_ID'],
    'redirect_to' => get_permalink( $comment['comment_post_ID'] ),
    'subscribe'   => isset($_POST['subscribe']) ? $_POST['subscribe'] : null,
  )
);

После чего лезем в плагин Subscribe to Comments, находим функцию add_subscriber и меняем следующую строку:

if (($_POST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {

На такую:

if (($_REQUEST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {

После чего работоспособность подписки на комментарии восстановится.

PS. Так что, если вы задавали вопросы, подписались на комментарии и не получили ответа - зайдите на страничку поста - может быть я вам уже ответил. :)

written by FX Poster \\ tags: ,

May 06

За последнее время набрел на несколько отличных блогов и статей, которыми бы хотелось с вами поделиться.

Начну, пожалуй с блога моего “знакомого” (он меня, наверное, в лицо и не помнит), с которым я познакомился на Exception #07, организатором которой он собственно и является - “Иван Пирог в режиме онлайн“. Он открыл его буквально несколько дней назад и пока что там находятся только несколько статей по “самомотивации”. Может эта тема и не особенно интересна как таковая, но блог почитать очень советую - по-моему пишет Ваня просто замечательно. Кстати, у Юры Артюха эта тема тоже недавно поднималась, сговорились что ли. :)

Следующим будет блог, на который я попал как раз таки из блога Вани - Мурк дотком. Автор пишет о разном. Статьи очень интересны, особенно мне понравились последние статьи об agile-методологиях программирования. Я о методологиях в принципе никогда ничего не читал, но после этих двух статей я очень заинтересовался этой темой. Да и вообще - всегда приятно почитать умного человека.

Третьей, и последней “интересностью” будет не блог, а статья, ссылку на которую я почерпнул у Алёны Сагалаевой - статья называется “Редкая профессия” и повествует о разработке компилятора C++, которую проводила наша, отечественная комманда разработчиков в составе всего двух человек. Рекомендую. Настоятельно рекомендую!

UPDATE: Да, кстати, совсем забыл - теперь я регулярно заношу всякие интересные статьи себе в del.icio.us. Можете подписываться.

written by FX Poster

May 06

В последнее время очень хочется написать что-нибудь на Symfony - для себя, для других, что-то открытое и интересное - наподобии материала о создании askeet’а, который я, к сожалению, до конца дочитать еще не успел (но я близок к завершению!), и чтение которого приносит мне реальное удовольствие.

Причем хочется сделать что-то подобное не только потому, что я “хочу показать, что symfony - это круто”, “хочу показать, что я крутой программист” - нет, скорее даже наоборот. Текущий мой проект на работе сейчас усиленно мной допиливается до состояния, в котором его хоть как-то можно будет показать людям, но внутренний код проекта сейчас пребывает, как мне кажется, в плачевном состоянии - кардинально его рефакторить времени и (если уж честно) опыта нет, а тот код, который сейчас там есть мне кажется абсолютно неоптимальным (и некрасивым). У меня в последнее время стало появляться сильное ощущение того, что у меня просто не хватает опыта для того, чтобы реально расставить в рабочем проекте все по полочкам, а помогать мне в этом никто не будет, к сожалению. Поэтому я и хочу сделать какой-нибудь небольшой, несложный (по крайней мере, для начала) проект, смотря на разработку которого, вы, мои читатели, показывали бы мне на что мне стоит обратить внимание, что получается вообще плохо, какие части следует полностью пересмотреть. Я знаю, среди вам есть люди, имеющие гораздо больше опыта в разработке веб-приложений, чем я.

Сейчас для меня самый главный вопрос - что именно делать. Есть варианты:

  • Блог - нужен, скорее всего, будет только мне, да и… сколько людей уже строило свои блоги… я, конечно, могу быть одним из них, но… в общем, если других вариантов не будет - возьмусь за блог
  • Простенькую социальную сеть. Даже не знаю, на какую тему, и что там вообще должно быть…
  • Может, что-нибудь еще… Хочу адекватные по сложности (и по времени разработки!) варианты услышать от вас. Что бы вы хотели, или что бы мне, на ваш взгляд, могло бы быть наиболее полезно.

written by FX Poster \\ tags: ,

May 06

Давно ничего не писал - как-то не о чем… Праздники, работа, учеба… Единственное, что реально интересно из этого списка - это работа, но… к сожалению, как раз она и “способствует” отсутствию статей в этом блоге - её много и на блог времени просто не остается… А написать, к счастью, есть о чем. :)

Сегодня речь пойдет о так называемых dialog widget’ах (периодически, слышу, что их также называют js-popup’ами). Недавно понадобилось реализовать такой функционал в моём “рабочем” проекте и стал вопрос об использовании существующих решений.

В проекте я использую jQuery и, соответственно, выбирал системку, которая базировалась бы на нем. Всё началось с Thickbox’а, который я довольно долгое время и использовал, но… Кое-что мне в нем не нравилось изначально:

  • Минимум настроек
  • Отличие от большинства плагинов jQuery
  • Отсутствие развития (последняя версия вышла в августе 2007-го года и зависела еще от jQuery 1.1x, хотя и с 1.2 тоже работала нормально)

… в итоге эти недостатки привели ко вполне логичному концу - я не мог реализовать 2 разных “диалога” на одной странице не “вторгаясь” в сам код Thickbox’а, причем застрял на мелочи - удиалогов должны были различаться бэкграунды - у одного он должен был быть полностью залит определенным цветом, а второй должен был быть полупрозрачным. Причем в первом случае сделать фон непрозрачным мне пришлось через CSS, хотя гораздо логичнее было бы предоставить эту возможность самой функции создания диалога.

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

Подробное описание (а также демонтрацию возможностей nyroModal) можно посмотреть на странице самого проекта, а я здесь приведу лишь несколько примеров использования.

Самый простой способ, при котором даже не нужно лезть в JavaScript - это присвоение ссылкам класса nyroModal:

<a href="demo.html" class="nyroModal">Ajax</a>

Эта ссылка откроет вам файл demo.html в “окошке”.

<a href="demo.html#demo" class="nyroModal">Ajax</a>

Эта - сделает почти то же самое, только в окошке будет только инфа из блока с id == “test” из файла demo.html.

<a href="#demo" class="nyroModal">No Ajax!</a>

А здесь у нас в окно попадет содержимое блока с id == “test” из текущей страницы.

Если же нужны какие-то дополнительные параметры (значения или callback-функции), то здесь уже без “ручного” JavaScript’а не обойтись:

<a href="#demo" id="no-ajax">No Ajax!</a>
<script type="text/javascript">
$('#no-ajax').nyroModal({
  bgColor: '#FFFFFF',
  showBackground: function(elts, settings, callback) {
    // elts.bg.css({opacity:0}).fadeTo(500, 0.75, callback);
    callback();
  },
  hideBackground: function(elts, settings, callback) {
    // elts.bg.fadeOut(300, callback);
    callback();
  }
})
</script>

Таким образом мы заменим цвет фона на белый + уберем прозрачность и анимацию при появлении/исчезновении фона.

На этом, наверное, будем прощаться. Если остались вопросы - обращайтесь. :)

written by FX Poster \\ tags: , , ,