K2ping - плагин пинга новых записей для K2

Воскресенье, 13 Октябрь 2013

 

Для нового раздела "Сниппеты", который работает на компоненте K2, решил сделать плагин, который бы отправлял пинг на http://ping.blogs.yandex.ru/RPC2

 

Пинг будет отправлятся после сохранения записи в K2, со статусом "опубликовано", и событием для плагина будет onAfterK2Save, по которому в плагине будет вызвана функция с таким же именем как и событие onAfterK2Save(&$row,$isNew)

 

При успешной отправки ping (пинга) на http://ping.blogs.yandex.ru/RPC2, на e-mail администратора сайта, будет уходить сообщение с кодом ответа XML-RPC сервиса ping.blogs.yandex.ru

 

Данная версия плагина написана под joomla 1.5 и K2 v2.6.7

 

Код плагина k2ping приведен ниже:

 

 
/**
 * @version    $Id: k2ping.php 1978 2013-10-13 19:34:16Z joomlaworks $
 * @package    K2
 * @author    toorr2p http://www.cleverscript.ru
 * @copyright  Copyright (c) 2013 - 2014 www.cleverscript.ru. All rights reserved..
 * @license    GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */
 
// no direct access
defined('_JEXEC') or die ;
set_time_limit(0);
 
jimport('joomla.plugin.plugin');
 
class plgSystemK2Ping extends JPlugin
{
 
  function plgSystemK2Ping(&$subject, $config)
  {
    parent::__construct($subject, $config);
  }
 
  public function YandexPing ($url, $blogname, $blogurl) 
  { 
 
    $tb_send='<?xml version="1.0"?> 
    <methodCall> 
      <methodName>weblogUpdates.ping</methodName> 
      <params> 
        <param> 
          <value>'.$blogname.'</value> 
        </param> 
        <param> 
          <value>'.$blogurl.'</value> 
        </param> 
      </params> 
    </methodCall>'; 
 
    $target=parse_url($url); 
 
    $tb_sock = fsockopen($target["host"],  80); 
    fputs($tb_sock, "POST " . $target["path"] . $target["query"] . " HTTP/1.1\r\n"); 
    fputs($tb_sock, "User-Agent: NoAgent\r\n"); 
    fputs($tb_sock, "Host: " . $target["host"] . "\r\n"); 
    fputs($tb_sock, "Content-Type: text/xml\r\n"); 
    fputs($tb_sock, "Content-length: " . strlen($tb_send) . "\r\n"); 
    fputs($tb_sock, "Connection: close\r\n\r\n"); 
    fputs($tb_sock, $tb_send); 
    // Gather result 
    while (!feof($tb_sock)) { 
      $response .= fgets($tb_sock, 128); 
    } 
    // Close socket 
    fclose($tb_sock); 
    // Did the trackback ping work 
    strpos($response, '<boolean>0</boolean>') ? $return = $response : $return = false; 
    // send result 
    return $response;
 
  }
 
  function onAfterK2Save(&$row,$isNew){
 
    $app = JFactory::getApplication();
 
    if($row->published==1){
 
      $title = $row->title;
      $url = JURI::root().'snippets'.DS.$row->alias.'.html';
 
      $response = self::YandexPing("http://ping.blogs.yandex.ru/RPC2", $title, $url);
 
      if($response){
        //send mess to admin
        $mail =& JFactory::getMailer();
        $mail->IsHTML(true);
 
        $config =& JFactory::getConfig();
 
        $mail->addRecipient( $config->getValue( 'config.mailfrom' ) );
        $mail->setSubject( 'ping.blogs.yandex.ru/RPC2' );
        $mail->setBody($response);
 
        if ($mail->Send()) {
          $app->enqueueMessage( 'Ping success, a notice in the email - '.$config->getValue('config.mailfrom') );
        } else {
          $app->enqueueMessage('Error - a notice in the email!', 'error');
 
        }
      }
 
    }
  }
 
}
 

 

 

Скачать плагин можно по ссылке K2ping plugin

 

PS. Читайте последние записи RSS Подписка на RSS

Метки:

Комментарии 

 
anonim Вторник, 12 Ноябрь 2013

Добрый вечер. Плагин не верно возвращает url
в адресе присутствут подкатегория 'snippets', как ее убрать?

 

 
 
anonim Среда, 13 Ноябрь 2013

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

$url = urldecode(JRout e::_(K2HelperRo ute::getItemRou te($row->id.':'.urlencode($row->alias), $row->catid.':'.urlencode($row->categoryalias)) ));

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

 

 

Добавить комментарий