Hatred's Log Place

DON'T PANIC!

Jan 12, 2012 - 2 minute read -

DokuWiki, BlogTNG, плагин googleplusone и доработка шаблона

Что бы при использовании плагина googleplusone совместно с BlogTNG при попытке “поделиться” постом в Google+ вставлялся не абы какой текст, а то, что вам нужно, следует внести некоторые модификации в используемый вами шаблон.

Обычно, главный файл шаблона, отвечающий за формирование страницы имеет имя main.php, но это может и не совсем соответствовать вашим реалиям. Тогда его вам придётся поискать самим.

Для начала, согласно рекомендациям самого гугла к открывающий `` следует модифицировать таким образом, что бы указывалась схема на http://schema.org:

<html ... itemscope itemtype="http://schema.org/Blog">

У меня он принял такой вид:

<html xmlns="http://www.w3.org/1999/xhtml" itemscope itemtype="http://schema.org/Blog">

Далее нужно добавить meta-заголовки:

  <!-- Google Plus Ready -->
  <meta itemprop="name" content="<?php tpl_pagetitle()?>" />
  <meta itemprop="description" content="<?php echo pageDescription()?>" />
  <meta itemprop="image" content="/img/logo.png" />
  <!-- Google Plus Ready -->

Все заголовки, которые могут быть можно посмотреть в описании схемы Blog: http://schema.org/Blog, основные, на которые можно обратить внимание:

  • name - заголовок поста
  • description - собственно короткое описание поста, которые и используется при попытке поделиться постом в Google+
  • image - картинка поста, пока не придумал как использовать кроме как жестко задать лого блога, но теоретически, можно парсить вывод странички поста и брать первую картинку.

Далее, непонятная функция pageDescription(), пишем её сами, помещаем в начало файла шаблона или в отдельный php-файл и подключаем директивой include. Сама функция выглядит так:

function pageDescription()
{
    global $ID;
    global $REV;

    $title = "";
    $ret = p_wiki_xhtml_summary($ID, $title, $REV, false);

    // Заменаяем в результирующем html все " на '
    $ret = str_replace("<br/>"", "'", $ret);
    // Удаляем первый заголовок - незачем его повторять
    $ret = preg_replace('/<[hH]1>.*<<br/>/[hH]1>/U', '', $ret);
    // Теперь удаляем все html-теги, иначе текст не будет использоваться
    $ret = strip_tags($ret);

    // Убираем дублирующиеся переводы строк (теоретически можно заменить одним регулярным выражением, но на данный момент не заморачивался)
    while (true)
    {
        $old = $ret;
        $ret = preg_replace('/<br/>n<br/>n/mU', "<br/>n", $ret);
        if ($ret == $old)
        {
            break;
        }
    }

    return $ret;
}

По сути, создаёт короткое описание поста. Используется функция p_wiki_xhtml_summary(), объявленная устаревшей (deprecated), поэтому, если в будущем её удалят, придётся использовать p_wiki_xhtml() и трюки вида:

    $length = 256;
    $ret = preg_replace('/<br/>s+?(<br/>S+)?$/', '', substr($ret, 0, $length));

перед return

На этом всё пока.