Readers: 39
Topics: 46
Вы должны зарегистрироваться/войти чтобы добавлять сообщения в эту группу.
Здравствуйте уважаемые!
Прочитав статью о пользе пинга статей, решил настроить пинг на 7-ке, оказалось, модуль multiping еще не портирован, а тот вариант, который на орге предложил andypost не пингует при посте статьи. Ждать не хотелось, решил написать свой сниппет для rules.
Ближе к телу.
Устанавливаем rules, создаем правило по событию Before saving content, в Conditions можете настроить все, что заблагорассудится.
В Actions добавляем Execute custom PHP code и вставляем следующий сниппет:
global $base_url, $base_path; $url = $base_url . $base_path . drupal_get_path_alias('node/' . $node->nid); $services = array( 'http://ping.blogs.yandex.ru/RPC2', 'http://blogsearch.google.com/ping/RPC2', 'http://rpc.pingomatic.com', 'http://xping.pubsub.com/ping/', 'http://rpc.weblogs.com/RPC2', 'http://blogpeople.net/servlet/weblogUpdates', ); foreach($services as $service){ $ping = xmlrpc($service, array('weblogUpdates.ping' => array($node->title, $url))); if (!$ping) watchdog('ping', 'Error sending ping to "%site_name».', array('%site_name' => $service)); }
Помним о том, что код НЕ ДОЛЖЕН содержать <?php ?>
.
Готово! Теперь при каждом создании новой ноды или апдейте существующей мы пингуем 6 самых важных для русскоязычного сайта сервисов.
Комментарии (23)
Простые понятные сниппеты мне всегда нравились больше нагроможденных модулей с админкой
У Rules далеко непростая админка.
По-моему более простой вариант, чем для одного действия ставить немаленький модуль, просто написать свой хук в модуле. + Вы как-то интересно формируете путь — можно просто использовать опцию absolute функции
url().
Rules конечно не самый легкий модуль, но ведь он делает то же самое, что ваш модуль — он просто выполняет сниппет по хуку. Как я уже писал на д.ру, можно написать модуль, но сейчас нет на это времени.
За абсолютный путь url спасибо, совсем забыл про него :)
В чем проблема этот код вставить в свой модуль? Я практически повторила Ваш код, просто Вы его использовали в Rules, а я в контексте своего модуля. И не придется палить по воробьям из пушек. Поэтому про нехватку времени не очень поняла.
Если честно, не могу понять что именно вы сейчас пытаетесь доказать? Что вы можете написать модуль, так напишите. Мне вот модуль из одного хука писать
стыдноне хочется, а закладывать в него некий серьезный функционал некогда.Сниппет был написан, как некий вариант переждать, пока не выйдет multiping для 7.
Ок, каждый остается при своем мнении. Мне легче для одной маленькой функциональности впихнуть в модуль-заготовку хук за 5 минут, и при этом ничуть не стыдно, так как на любом проекте делаю маленький, или большой модуль-заточку под сайт, где кастомизирую функциональность. Вам легче для такой простой функциональности, ставить Rules.
Очень вероятно что в 7ке node-hook можно прямо из темы вызывать, только не забыть почистить кеш cache_bootstrap
Ясно.
Энди, а что там с мультипингом? Он скорее мертв или скорее жив?
пока мёртв, наверно
Для временного решения проблемы весной сделал вот это: http://drupal.org/project/simpleping (который пингует при создании и сохранении ноды).
У меня какбы замечания есть:
1.
function simpleping_install()
в файле simpleping.module зачем? Для это существуют .install-файл2.
simpleping_node_insert($node)
simpleping_node_update($node)
, пинг идет, без каких-либо условий. А если на эту ноду анонимусу вход запрещен, зачем пинг слать? Бот попадет на 403.3.
Функция
url()
должна формировать пути.Последнее не как замечание, а как альтернативный вариант использования: использовать PDO-синтаксис в запросах к бд.
Спасибо, постараюсь всё учесть и допилить. Я-то сам это делал на коленке именно из соображений «что-то надо использовать, пока multiping для семёрки не готов».
Но за такое ревью — спасибо огромное. Думаю, всем начинающим разработчикам не хватает подобной конкретной помощи, с чёткими указаниями на то, как надо.
Алексей, именно из вашего модуля я скопипастил сам момент пинга )
Отлично, это же опенсоурс :-)
На выходных написал-таки полноценный модуль для 7-ки. Осталось причесать код и можно выкладывать.
А у вас в модуле будет тот нюанс, который подсказала выше annya? Про то, что хорошо бы проверять через node_access есть ли анонимов доступ к ноде, прежде, чем слать пинг.
Если да, то мой модуль уже точно не нужен. Как зарелизитесь — дайте ссылку на ваш модуль, сошлюсь на него со странички simpleping и его уже не стану допиливать.
Да, пинг будет слаться только на опубликованные ноды.
Для начала планирую выложить на суд общественности здесь и на д.ру. На выходных пытался понять как на орге работать с git'ом, не понял пока :)
Лучшее русскоязычное пособие по GIT`у: http://githowto.com/ Оно, правда, гораздо объёмнее, чем требуется для д.орг, а для последнего достаточно внимательного просмотра скринкаста: http://vimeo.com/20459209 (не по-русски).
Кроме опубликованности annya резонно предложила ещё проверять, доступна ли нода анонимусам (в данном случае, поисковым ботам). Ведь может быть такое, что нода опубликована, но доступна только определенным ролям.
Знаете способ такой проверки? Я нет.
За GIT спасибо! Буду смотреть.
а пинг до http://blogsearch.google.com/ping/RPC2 таким образом работает? в доках сказано что нужно использовать метод
weblogUpdates.extendedPing
а неweblogUpdates.ping
Попробовал:
Результат:
flerror — FALSE
message — Thanks for the ping.
Видимо гугл можно пинговать различными способами.
Модуль Ping.