Extension:Add HTML Meta and Title/ru

From MediaWiki.org
Jump to navigation Jump to search
Справка по расширениям MediaWiki
Crystal Clear action run.svg
Add HTML Meta and Title
Статус релиза: бета
Реализация Tag
Описание Позволяет более лёгкую оптимизацию поиска в MediaWiki.
Автор(ы) Vladimir Radulovski, Jim Wilson (Владимир Радуловскиtalk)
Последняя версия 0.5.1
MediaWiki 1.6.x, 1.8.x, 1.9.x or higher (not tested by author on most recent MW versions - i.e. > 1.12)
Изменения БД Нет
Лицензия MIT License
Загрузка external download (v0.5.0) - save file and rename phps to php
Тэги
<seo>
Использованные hook'и
OutputPageBeforeHTML
BeforePageDisplay
Переведите расширение Add HTML Meta and Title если оно доступно на translatewiki.net
Проверьте использование и версию.

Позволяет более лёгкую оптимизацию поиска в MediaWiki.

Использование

Если ввести <seo title="word1,word2,..." metakeywords="word1,word2,..." metadescription="word1,word2,..." />

...или более короткую версию...

<seo title="word1,word2,..." metak="word1,word2,..." metad="word1,word2,..." />

в wiki слова добавляются к HTML "title" и "meta" хедерам. Это и позволяет лёгче оптимизировать поиск в MediaWiki.

В примере приведённом выше будет выдано: <title>Первоначальное название, word1,word2,...</title> (таким образом ", word1,word2,..." добавляется к названию)

<meta name="keywords" content="word1,word2,..." /> (это новая meta - уже существующие остаются без изменений)

Как я это сделал(а)

Используется два MediaWiki крючка - OutputPageBeforeHTML (для meta) и BeforePageDisplay (для добавления к названию).

Так-же добавления к Extension:MetaKeywordsTag и дополнительные возможности привели к созданию нового плагина. Возможно однажды это станет стандартным способом оптимизировать MediaWiki :)

Лицензия

Add HTML Meta and Title распространяется под MIT Лицензией.

Инсталляция

Лог изменения

v0.5.1

  • modified to work with MW versions 1.1.2 and up (Revision by Mic)

v0.4

  • добавлено $emt=""; в функции parseSEO из-за PHP ошибок связанных с не инициализированной переменной...

v0.2

  • добавлена функция htmlspecialchars() как фильтк текста - нужно-ли ещё что-то чтобы предотвратить вандалов? Я так не думаю. (Если ты англо-говорящий, то можно использовать htmlentities функцию в PHP, которая более безопасна)

v0.1

  • Первая версия - всё работает.

The code for version 0.5.1 (MW 1.1.2 and up)

 <?php
/*
*
* Extension homepage is at  http://www.mediawiki.org/wiki/Extension:Add_HTML_Meta_and_Title
*
* --------------- Begin Jim R. Wilson's License Data --------------------------------------------------------
 * Copyright (c) 2007 Jim R. Wilson
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy 
 * of this software and associated documentation files (the "Software"), to deal 
 * in the Software without restriction, including without limitation the rights to 
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
 * the Software, and to permit persons to whom the Software is furnished to do 
 * so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all 
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
 * OTHER DEALINGS IN THE SOFTWARE. 
 * --------------- End of Jim R. Wilson's License Data --------------------------------------------------------
 */
 
 /* Version 0.5a Modified by Mic,
 Added support for newer versions ie. 1.1.8
 */
 
 
# Confirm MW environment
if (defined('MEDIAWIKI')) {

# Credits
$wgExtensionCredits['parserhook'][] = array(
    'name'=>'Add_HTML_Meta_and_Title',
    'author'=>'Vladimir Radulovski, Jim Wilson, Mic',
    'url'=>'https://www.mediawiki.org/wiki/Extension:Add_HTML_Meta_and_Title',
    'description'=> htmlentities ('Adds the <seo title="word1,word2,..." metakeywords="word1,word2,..." metadescription="word1,word2,..." /> tag so you can add to the meta keywords and HTML-title of a wiki-page. If you are lazy just use the short version: <seo title="1 , 2" metak="m1 m2,m3" metad="word1, word2"  /> .'),
    'version'=>'0.5.1'
);

# Add Extension Function
$wgExtensionFunctions[] = 'setupSEOParserHooks';



/**
 * Sets up the MetaKeywordsTag Parser hook and system messages
 */
function setupSEOParserHooks() {
    global $wgParser, $wgExtensionMessages;
# meta if empty
    $wgParser->setHook( 'seo', 'renderSEO' );
    $wgExtensionMessages['seo-empty-attr'] ='Error: &lt;seo&gt; tag must contain at least one non-empty &quot;title&quot; or &quot;metak(eywords)&quot; or &quot;metad(escription)&quot; attribute.';
	return true;
}

/**
 * Renders the <keywords> tag.
 * @param String $text Incomming text - should always be null or empty (passed by value).
 * @param Array $params Attributes specified for tag - must contain 'content' (passed by value).
 * @param Parser $parser Reference to currently running parser (passed by reference).
 * @return String Always empty.
 */
function renderSEO( $text, array $params, Parser $parser, PPFrame $frame ) {

    
	# Short-circuit with error message if content is not specified.
    $emt="";
	
	
    
    if  ( (isset($params['title']))             ||
          (isset($params['metak']))             ||
          (isset($params['metad']))             ||
          (isset($params['metakeywords']))         ||
          (isset($params['metadescription']))
        )
    {
            if  (isset($params['title'])) {$emt .= "<!-- ADDTITLE ".base64_encode($params['title'])." -->";}
            if  (isset($params['metak']))        {$emt .= "<!-- ADDMETAK ".base64_encode($params['metak'])." -->";}
            if  (isset($params['metakeywords'])) {$emt .= "<!-- ADDMETAK ".base64_encode($params['metakeywords'])." -->";}
            if  (isset($params['metad']))           {$emt .= "<!-- ADDMETAD ".base64_encode($params['metad'])." -->";}
            if  (isset($params['metadescription'])) {$emt .= "<!-- ADDMETAD ".base64_encode($params['metadescription'])." -->";}
     
            return $emt; //$encoded_metas_and_title;
     
    }
    else
	
	 
    {return
            '<div class="errorbox">'.
            wfMsgForContent('seo-empty-attr').
            '</div>';
    }
	
	

}


# Attach post-parser hook to extract metadata and alter headers
$wgHooks['OutputPageBeforeHTML'][] = 'insertMeta';
#$wgHooks['BeforePageDisplay'][] = 'insertMeta';
$wgHooks['BeforePageDisplay'][] = 'insertTitle';
#$wgHooks['OutputPageBeforeHTML'][] = 'insertTitle';

/**
 * Adds the <meta> keywords to document head.
 * Usage: $wgHooks['OutputPageBeforeHTML'][] = 'insertMetaKeywords';
 * @param OutputPage $out Handle to an OutputPage object - presumably $wgOut (passed by reference).
 * @param String $text Output text.
 * @return Boolean Always true to allow other extensions to continue processing.
 */
 

 function insertTitle ( $out ) {
 
 	global $wgSitename;
     # Extract meta keywords
// public function getHTML() { return $this->mBodytext; }
     
    if (preg_match_all(
        '/<!-- ADDTITLE ([0-9a-zA-Z\\+\\/]+=*) -->/m', 
        $out->mBodytext, 
        $matches)===false
    ) return true;
    $data = $matches[1];
//    print_r ($data) ;
    # Merge keyword data into OutputPage as meta tags
    foreach ($data as $item) {
        $content = @base64_decode($item);
    $content = htmlspecialchars($content, ENT_QUOTES);
        
        if ($content) {
//        print "DA $content\n";
        $new_title = $out->mHTMLtitle;
        $new_title = "$content - ".$wgSitename;
        $out->setHTMLTitle( $new_title );
        }
        else {
//        print "TZ\n";
        }
        
    }


    return true;

}

function insertMeta( $out, $text ) {

    # Extract meta keywords
    if (preg_match_all(
        '/<!-- ADDMETAK ([0-9a-zA-Z\\+\\/]+=*) -->/m', 
        $text, 
        $matches)===false
    ) return true;
    $data = $matches[1];
    
    # Merge keyword data into OutputPage as meta tags
    foreach ($data AS $item) {
        $content = @base64_decode($item);
    $content = htmlspecialchars($content, ENT_QUOTES);
        
        if ($content) {
        $out->addMeta( 'keywords', $content );
        }
        
    }
// Now for desc

    # Extract meta keywords
    if (preg_match_all(
        '/<!-- ADDMETAD ([0-9a-zA-Z\\+\\/]+=*) -->/m', 
        $text, 
        $matches)===false
    ) return true;
    $data = $matches[1];
    
    # Merge keyword data into OutputPage as meta tags
    foreach ($data AS $item) {
        $content = @base64_decode($item);
    $content = htmlspecialchars($content, ENT_QUOTES);
#preg_replace($pattern, $replacement, $string);

        if ($content) {
        $out->addMeta( 'description', $content );
        }
        
    }
    
    return true;
}

} # End MW env wrapper

Смотри также

  • Extension:MetaKeywordsTag только для meta
  • Если надо только поменять название (но не добавлять к нему слова), возможно подойдёт DISPLAYTITLE вместе с настройками Manual:$wgAllowDisplayTitle и Manual:$wgRestrictDisplayTitle.
  • Extension:Advanced Meta для лёгкого изменения настроек роботов, meta и keywords на целых именных пространствах или отдельных страницах.
Другие языки: English  • русский