[Mediawiki] Подключаем Sape

Так как у меня есть несколько сайтов на движке wiki, а именно mediawiki, то я решил немного заработать на них с помощью биржи ссылок. Использовать будем биржу Sape. Аналогично можно подключить и Trustlink

Инструкция приведенная на форуме не помогла мне. Ссылки уходили в «error» на следующий день. Стал пробовать и нашел способ.

Будем изменять код движка, так что нужен к нему, например, по ftp.

Вначале скачиваем архив с сайта sape. Ссылка на скачивание дается, когда вы подключается сайт. Распаковываем и копируем в папку и файл в корень сайта. Название папки и файла — ваш уникальный id, который состоит из цифр и букв от a до f (hex-код или шестнадцатеричный). Не забываем, что на папку должны быть выставлены права 777.

Вначале, редактируем файл robots.txt, а точнее добавляем в него:

Disallow: *SpecialPages

Теперь займемся редактированием движка. Находим файл SpecialPage.php и ищем:
function setHeaders() {
$out = $this->getOutput();
$out->setArticleRelated( false );
$out->setRobotPolicy( "noindex,nofollow" );
$out->setPageTitle( $this->getDescription() );

Вместо него записываем:
function setHeaders() {
$out = $this->getOutput();
$out->setArticleRelated( false );
#$out->setRobotPolicy( "noindex,nofollow" );
$out->setPageTitle( $this->getDescription() );

Это нужно чтобы Sape могла определить все страницы через служебные.

Теперь занимаемся изменением темы. Для темы vector будем менять файл vector.php в папке skins:

Находим там такой код:

<!-- panel -->
<div id="mw-panel" class="noprint">
<!-- logo -->
<div id="p-logo"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
<!-- /logo -->
<?php $this->renderPortals( $this->data['sidebar'] ); ?>
</div>
<!-- /panel -->

И вместо него записываем
<!-- panel -->
<div id="mw-panel" class="noprint">
<!-- logo -->
<div id="p-logo"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
<!-- /logo -->
<?php $this->renderPortals( $this->data['sidebar'] ); ?>
<!-- sape -->
<div class="portal" id="p-tb">
<h5 tabindex="3">Реклама</h5>
<div class="body">
<ul><?php echo $GLOBALS['sape_links']; ?>
</ul>
</div>
</div>
<!-- /sape -->
</div>
<!-- /panel -->

Но у меня с этой темой не сложилось. Та и у многих стоит тема MonoBook, так что в файле темы /skins/MonoBook.php, после:
<?php
$sidebar = $this->data['sidebar'];
if ( !isset( $sidebar['SEARCH'] ) ) $sidebar['SEARCH'] = true;
if ( !isset( $sidebar['TOOLBOX'] ) ) $sidebar['TOOLBOX'] = true;
if ( !isset( $sidebar['LANGUAGES'] ) ) $sidebar['LANGUAGES'] = true;
foreach ($sidebar as $boxName => $cont) {
if ( $boxName == 'SEARCH' ) {
$this->searchBox();
} elseif ( $boxName == 'TOOLBOX' ) {
$this->toolbox();
} elseif ( $boxName == 'LANGUAGES' ) {
$this->languageBox();
} else {
$this->customBox( $boxName, $cont );
}
}

Перед
?>

Дописываем:
$this->customBox( 'реклама', $GLOBALS['sape_links'] );

Теперь дописываем настройки в LocalSettings.php:
# SAPE
global $sape;
global $GLOBALS;
define('_SAPE_USER','код');
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$o['host'] = 'сайт без http';
$o['charset'] = 'UTF-8';
$o['request_uri'] = $_GET['uri'];
$o['request_uri'] = str_replace('%2F', '/', urlencode($o['request_uri']) );
$o['force_show_code'] = 'true';
$sape = new SAPE_client($o);
unset($o);
$sape_links = $sape->return_links();
$GLOBALS['sape_links'] = $sape_links;

Не забываем менять «код» в четвертой строчке на ваш. И все можно добавлять/индексировать сайт в sape.

Альтернативный вариант

Этот вариант подсказал один из комментаторов (ник Аноним), за что большое ему спасибо!

Добавить в LocalSettings.php:

# SAPE
$wgNamespaceRobotPolicies = array(
    NS_SPECIAL => 'index,follow'
);

$wgHooks['SkinBuildSidebar'][] = 'fnSape';

function fnSape($skin, &$bar) {
    define('_SAPE_USER', 'код SAPE');
    require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
    $o['host'] = 'сайт без http';
    $o['charset'] = 'UTF-8';
    $o['request_uri'] = $_GET['uri'];
    $o['request_uri'] = str_replace('%2F', '/', urlencode($o['request_uri']) );
    $o['force_show_code'] = 'true';
    $sape = new SAPE_client($o);
    unset($o);
    $sape_links = $sape->return_links();
    $bar['Реклама'] = $sape_links;
    return true;
}

Не забываем поменять код Sape и адрес сайта.

Другой вариант кода:

# SAPE

$wgSapeUserID = 'КОД SAPE';
$wgHooks['SkinBuildSidebar'][] = 'wfSape';

function wfSape($skin, &$bar) {
    global $IP, $wgServer, $wgSapeUserID;
    if ( $skin->getUser()->isLoggedIn() && $wgGoogleAdSenseAnonOnly ) {
        return $bar;
    }
    define('_SAPE_USER', $wgSapeUserID);
    require_once("$IP/$wgSapeUserID/sape.php");
    $sape = new SAPE_client(array(
        'host' => $wgServer,
        'charset' => 'UTF-8'
    ));
    $out = $sape->return_links();
    if (strstr($out, 'href') !== FALSE) {
        $out = '<ul><li>'.$out.'</li></ul>';
    }
    $bar['Реклама'] = $out;
    return true;
}

13 thoughts on “[Mediawiki] Подключаем Sape

    • Я пробовал с векторной темой, но ссылки уходили в Error иногда. Но возможно, что-то не так с настройками php.

  1. В векторной теме вставка последней строчки вызывает ошибку:

    Call to undefined method VectorTemplate::customBox()

    Как поправить?

    • А вы дописывали в файл вывод skins/Vector.php?

      У меня вначале поста идет изменение темы вектор, а потом темы monobook. У них немного по разному вывод идет.

  2. Да. Но сделал это с небольшой ошибкой.

    Ошибку поправил и сделал точно по инструкции, НО Sape не видит код и  не хочет добавлять сайт.

    PS на блоге проблема с комментированием. Если обновить страницу, форма комментариев становится неактивной. Приходится открывать в другом браузере.

    • На счет комментирования – видимо система кэширования подглючивает. Спасибо, что сказали. Буду искать в чем проблема.

  3. Прошу прощения за мои кривые руки (или что там было виной).

    Еще раз проделал все по инструкции и сапа увидела код.

    • Возможно, один какой-нибудь символ в начале или в конце не скопировался из-за чего и не работало.

      У меня тоже были проблемы с установкой кодов сапы были. Сейчас выпадают иногда ошибки из-за редиректов (перенаправлений страниц).

  4. Вот что в итоге получилось:

    # SAPE
    $wgNamespaceRobotPolicies = array(
        NS_SPECIAL => 'index,follow'
    );
    
    $wgHooks['SkinBuildSidebar'][] = 'fnSape';
    
    function fnSape($skin, &$bar) {
        define('_SAPE_USER', 'код SAPE');
        require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
        $o['host'] = 'сайт';
        $o['charset'] = 'UTF-8';
        $o['request_uri'] = $_GET['uri'];
        $o['request_uri'] = str_replace('%2F', '/', urlencode($o['request_uri']) );
        $o['force_show_code'] = 'true';
        $sape = new SAPE_client($o);
        unset($o);
        $out = $sape->return_links();
        $bar['Реклама'] = $out;
        return true;
    }
    

    Никаких правок файлов движка не потребовалось. Сайт успешно добавлен в систему.

    Ссылки:

    https://www.mediawiki.org/wiki/Manual:Hooks/SkinBuildSidebar
    https://www.mediawiki.org/wiki/Manual:$wgDefaultRobotPolicy
    https://www.mediawiki.org/wiki/User:Ancap#Как%20добавить%20код%20trustlink%20/%20sape%20в%20MediaWiki?

  5. Немного доработал код. В данный момент сайт, на котором размещён код, успешно работает в системе.

    В настройках площадки:

    Отображение > Разделитель ссылок > ;
    Отображение > Ширина блока > 120px;

    Добавить в LocalSettings.php:

    # SAPE
    
    $wgSapeUserID = 'КОД SAPE';
    $wgHooks['SkinBuildSidebar'][] = 'wfSape';
    
    function wfSape($skin, &$bar) {
        global $IP, $wgServer, $wgSapeUserID;
        if ( $skin->getUser()->isLoggedIn() && $wgGoogleAdSenseAnonOnly ) {
            return $bar;
        }
        define('_SAPE_USER', $wgSapeUserID);
        require_once("$IP/$wgSapeUserID/sape.php");
        $sape = new SAPE_client(array(
            'host' => $wgServer,
            'charset' => 'UTF-8'
        ));
        $out = $sape->return_links();
        if (strstr($out, 'href') !== FALSE) {
            $out = '<ul><li>'.$out.'</li></ul>';
        }
        $bar['Реклама'] = $out;
        return true;
    }

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.