Manual:Special pages/cs

Speciální stránky jsou stránky, které generuje systém až v okamžiku zavolání, obvykle za účelem vykonání určité specifické funkce. Taková speciální stránka může vygenerovat třeba seznam všech stránek, na kterých se nachází minimálně jeden odkaz na externí webovou stránku, nebo nabízet formulář, jehož prostřednictvím mohou uživatelé poskytovat zpětnou vazbu. Speciální stránky mají svůj vlastní jmenný prostor (Speciální:) ale nedají se editovat, tím se liší od ostatních stránek. Nové speciální stránky mohou vytvářet pouze. Ale pracují s nimi uživatelé, kterým se zobrazují na stránce s přehledem dostupných speciálních stránek Special:SpecialPages. Některé speciální stránky jsou ale dostupné jen uživatelům s odpovídajícím oprávněním. Některé speciální stránky se v tomto přehledu nezobrazují vůbec, protože s nimi pracuje interně sama wiki.

Základní informace
Všechny vestavěné speciální stránky, které přicházejí s MediaWiki, se nazývají  a jsou umístěny v adresáři. Základní speciální stránky musí být zaregistrovány v základním seznamu umístěném v, aby je MediaWiki načetla. Speciální stránky vytvořené vývojáři třetích stran jsou obecně uloženy v adresáři  v jejich vlastním souboru nebo jako součást většího rozšíření. Všechny speciální stránky dědí z třídy s názvem, která je definována v. Při vytvoření nové speciální stránky lze definovat uživatelská práva potřebná pro přístup na stránku. Tato práva mimo jiné určují, zda se stránka zobrazí na Special:SpecialPages a zda je stránka zahrnuta do jiných stránek.

Speciální stránky mají také jedinečné názvy, které lze na wiki upravit. Obecná forma je "Special:Název stránky", kde lze přizpůsobit "Special" i "Název stránky". Speciální pseudo lze přeložit do jiných jazyků. Tento přeložený jmenný prostor lze vytvořit pomocí wikitextu    , na této wiki vkládá "    ". Jméno speciální stránky lze také předefinovat v systémové zprávě pro jazyk webu s obecným názvem speciální stránky jako ID.

Speciální stránka může nebo nemusí umožňovat vstup. Například Special:Export umožňuje uživateli definovat konkrétní stránku k exportu voláním Special:Export/Sun. Pokud speciální stránka umožňuje komplexní vstup, budou další parametry odeslány v řetězci dotazu složky URL ke zpracování, např. https://www.mediawiki.org/w/index.php?title=Special:Recentchanges&days=3&limit=250.

Základní šablona speciální stránky
Většina speciálních rozšíření stránek vyžaduje tři soubory:


 * Malý instalační soubor, který se načte při každém spuštění MediaWiki.
 * Soubor s většinou kódu.
 * Lokalizační soubor.

Konvence kódování MediaWiki definují tři soubory takto:


 * - Instalační soubor.
 * - Speciální kód stránky.

Umístěte všechny soubory do nového adresáře v adresáři  MediaWiki.

Zvláštní stránkovací soubor byste měli pojmenovat podle přípony. Například obsahuje soubor. Pokud vaše rozšíření používá více než jednu speciální stránku, budete potřebovat více názvů.

V níže uvedeném příkladu je název speciální stránky MyExtension.

Po vytvoření souborů uvedených níže přidáním následujícího řádku do LocalSettings.php povolíte rozšíření:

Instalační soubor
Příklad instalačního souboru pro :

Tento soubor registruje několik důležitých a povinných věcí:


 * Umístění třídy MediaWiki\Extension\MyExtension\Special.
 * Umístění lokalizačních souborů.
 * Novou speciální stránku a její název třídy.

Soubor speciální stránky
Soubor skupiny by měl obsahovat podtřídu   nebo jednu z jejích podtříd. Tento soubor se načte automaticky, když někdo požádá o speciální stránku. Níže uvedený příklad implementuje podtřídu SpecialMyExtension.

Potřebujete konstruktor, protože jeho první parametr pojmenovává vaši speciální stránku.

je hlavní funkce volaná při přístupu na speciální stránku. Tato funkce přepíše funkci. Předá jediný parametr, komponentu podstránky aktuálního titulku. Pokud například někdo následuje odkaz na Special:MyExtension/blah,  obsahuje "blah".

Wikitext a výstup HTML byste měli spustit přes. Nepoužívejte 'print' nebo 'echo' přímo při práci v uživatelském rozhraní wiki.

Pokud však svou speciální stránku používáte jako přístupový bod k vlastnímu XML nebo binárnímu výstupu, podívejte se na stránku.

Lokalizační soubor

 * Podívejte se na stránku, jak jej přeložit.

Všechny speciální stránky mají název, například.


 * Název se používá v prvcích a  na stránce rozšíření a na Special:SpecialPages.
 * Může to být cokoliv, ale mělo by to popisovat speciální stránku a rozšíření.
 * Je specifikováno prostřednictvím zprávy. Struktura zprávy je pár klíč-hodnota. Klíč,, musí být psán malými písmeny.

Příklad lokalizačního souboru v :

V dokumentaci ke zprávě :

Všimněte si, že ID by neměla začínat velkým písmenem a že mezera v ID by měla být zapsána v kódu jako podtržítko.

Zpráva -summary je volitelná. Je vytvořen automaticky nadřazenou třídou a zobrazen v horní části speciální stránky, obvykle pro stručný popis toho, co na něm může uživatel dělat. Pokud nedefinujete jeho obsah, bude použit pouze tehdy, když jej administrátoři wiki přizpůsobí na wiki.

Soubor aliasů
Můžete také internacionalizovat název speciální stránky vytvořením aliasů. Níže uvedený příklad používá soubor "MyExtension.i18n.alias.php". V tomto příkladu speciální stránka  registruje alias, takže stránka bude přístupná na   a   v němčině.

Přidejte svůj soubor aliasu do :

Přidat speciální aliasy stránky do :

Opět byste měli do ID napsat mezeru a do kódu podtržítko.

Pro záhlaví stránky a propojení platí obvyklá pravidla pro názvy stránek.

Pokud má  hodnotu true, malé písmeno se převede na velké a podtržítko se zobrazí jako mezera.

Například místo výše uvedeného bychom mohli použít, za předpokladu, že jsme jinde konzistentně identifikovali rozšíření jako.

Všimněte si, že v asociativním poli pro anglický jazyk je řetězec identifikující naši SpecialPage (v příkladu ) také platným názvem.

Všimněte si také, že první prvek musí být stejný jako klíč ! Jinak Special:Specialpages stránku nevypíše.

Skupina speciální stránky
Můžete nastavit, pod kterou skupinou se vaše speciální stránka objeví na Special:SpecialPages přepsáním  ve vaší podtřídě.

systémovou zprávu rozhraní, která se v angličtině překládá jako 'Media reports and uploads'; *     * @return string */   function getGroupName { return 'media'; }

Některé běžné hodnoty jsou 'login', 'maintenance', 'media', 'other', 'pagetools', 'redirects', 'users'. Přijímané hodnoty můžete vidět na Special:AllMessages (hledejte specialpages-group) nebo procházet wiki pomocí pseudojazyka 'qqx' na Special:SpecialPages?uselang=qqx ) a dívat se na nadpisy. Chcete-li použít zprávu rozhraní 'specialpages-group-media', zadejte slovo 'media'.

Pokud se vaše speciální stránka nevejde do žádného z předkonfigurovaných nadpisů, můžete přidat nový nadpis jeho přidáním do svého lokalizačního souboru, viz Lokalizační soubor).

Standardní skupiny stránek dodávané s MediaWiki jsou uvedeny v lokalizačním souboru. Například anglické zprávy jsou v  a začínají. Pokud chcete svou speciální stránku zařadit do kategorie, pak je zpráva. Hodnota tohoto klíče je text, který se zobrazuje jako název dané kategorie, například.

Pokud se vám zdá, že vaše speciální stránka nespadá do žádné ze stávajících kategorií, můžete vždy vytvořit novou. Do lokalizačního souboru vašeho rozšíření jednoduše vložte nový klíč pro pole. V tomto příkladu definujeme skupinu :

Nyní, za předpokladu, že jste v definici třídy nastavili návratovou hodnotu pro metodu  jako , znovu načtěte Special:SpecialPages, abyste viděli svou novou kategorii.

Konstruktor
Můžete přetížením konstruktoru inicializovat svá vlastní data, ale hlavním důvodem, proč byste to chtěli udělat, je změnit chování samotné třídy SpecialPage. Když zavoláte konstruktor základní třídy z vaší podřízené třídy, jsou k dispozici následující parametry:


 * string  název speciální stránky, jak je vidět v odkazech a adresách URL
 * string  uživatelské právo vyžaduje, např. "block" (blokovat) nebo "delete" (smazat); viz také Omezení přístupu na stránku
 * boolean  zda je stránka uvedena ve Special:Specialpages

Tím se inicializuje objekt OutputPage  s názvem a popisem vaší speciální stránky. Mělo by být vždy voláno z vaší metody execute.

Tato metoda vrací objekt OutputPage, ke kterému lze přistupovat, jak je popsáno níže. Stejně jako v příkladu kódu použijte

namísto zastaralé globální proměnné

Tato metoda vrací objekt WebRequest, ke kterému lze přistupovat, jak je popsáno níže. Stejně jako v příkladu kódu použijte

namísto zastaralé globální proměnné

Některé speciální stránky lze zahrnout z jiné stránky. Pokud například přidáte do wikitextu stránky, vloží se seznam posledních změn do stávajícího obsahu stránky.

Zahrnutí speciální stránky z jiné webové stránky je možné pouze v případě, že jste stránku prohlásili za zahrnutou v konstruktoru. Můžete to udělat přidáním následujícího do metody  po inicializaci nadřazené třídy:

Můžete také definovat svou speciální třídu stránky jako rozšíření třídy IncludableSpecialPage.

Funkce SpecialPage->včetně vrací booleovskou hodnotu, která vám říká, z jakého kontextu je speciální stránka volána: False, pokud se jedná o samostatnou webovou stránku, a true, pokud je zahrnuta z jiné webové stránky. Obvykle budete chtít prezentaci poněkud zmenšit, pokud je zahrnuta stránka.

Toto je funkce, kterou by vaše třída měla přetížit. Předává jeden parametr, obvykle označovaný krypticky jako  (zkratka pro $parameter, protože je to parametr, který mohou uživatelé vložit na vaši speciální stránku). Tento parametr je součástí podstránky aktuálního titulu. Pokud například někdo následuje odkaz na Special:MyExtension/blah,  bude obsahovat "blah".

Nápověda
Je užitečné přidat stránky nápovědy na MediaWiki.org, kde budou přeložitelné. Chcete-li zajistit, aby uživatelé nalezli vaši stránku nápovědy, je vhodné a velmi jednoduché, aby vaše speciální stránka odkazovala na příslušnou stránku nápovědy:

OutputPage.php
OutputPage.php obsahuje definici třídy pro objekty typu. OutputPage.php obsahuje definici třídy pro objekty typu $OutputPage.

Název proměnné $output je samozřejmě libovolný. Ať už to nazýváte jakkoli, toto je proměnná, kterou budete používat nejvíce, protože je to způsob, jak odeslat výstup do prohlížeče (ne, nepoužíváte  nebo  ). Pokud ji chcete někde použít, deklarujte proměnnou global:

Pokud chcete, můžete v rozšíření SpecialPage vytvořit různými metodami více objektů OutputPage. Přidají se k výstupu v pořadí, v jakém jsou prováděny.

Třídu OutputPage můžete zkontrolovat zobrazením  (ve skutečnosti lze zkontrolovat všechny), ale existuje několik metod, o kterých byste měli určitě vědět.

V podstatě rychlá a nečistá náhrada za. Vezme váš vstup a přidá ho do vyrovnávací paměti: Žádné otázky. V níže uvedené akci, pokud  obsahuje uživatelská data, může snadno vložit XSS, špatné věci nebo spawn Satan. Pro vytvoření důvěryhodného výstupu je lepší použít escapování (například pomocí funkce php htmlentities) nebo třídu XML builders.

Pro většinu výstupu byste měli používat tuto funkci. Je to trochu funkce černé magie: Wikitext vstupuje, vychází HTML a mezi tím se odehrává spousta tajemných kódů a vyvolávání démonů.

Co stojí za zmínku, je to, že analyzátor bude vaše kousky považovat za soudržné celky a svým způsobem za odstavec. To je...

Vypíše tři seznamy s jednou položkou, což pravděpodobně nebylo zamýšleno.

Pokud však chcete pouze vložit systémovou zprávu aby s ní bylo zacházeno jako s analyzovaným wikitextem, můžete použít kód jako. To nebude mít problém s vnořenými voláními analyzátoru uvedenými výše.

řešení č. 1
Důležité: Tato řešení jsou potřeba pouze v případě, že vytváříte speciální stránku, kterou lze převést. Běžné speciální stránky je nepotřebují.

Jako náhradní řešení můžete nechat svá rozšíření převést Wikitextem do HTML pomocí samostatného objektu Parser a poté použít. Příklad:

řešení č. 2
Vyzkoušel jsem výše uvedené a zjistil jsem, že stejný problém se nyní vztahuje na všechny značky v transkludovaném textu. U spousty rozšíření to nebude problém, ale rozšíření, které jsem psal, mělo v rámci své funkčnosti zobrazovat wikitext z jiné stránky, takže to byl problém.

Proces analýzy stránky, která převádí speciální stránku, vypadá takto:


 * 1) Nahraďte  značkou UNIQ-QINU (protože se očekává, že výstup SpecialPage bude připravený k výstupu HTML).
 * 2) Nahraďte všechny štítky za značky QINU, jak je uvedeno výše.
 * 3) Analyzujte vše ostatní od wikitextu po HTML.
 * 4) Nahraďte všechny značky QINU jejich příslušnými uloženými hodnotami v jediném průchodu.

Proces analýzy stránky, která převádí ne-speciální stránku, je však zřejmě tento:


 * 1) Nahraďte  nebo  obsahem transkludované stránky (protože transkludované stránky obsahují neanalyzovaný wikitext).
 * 2) Nahraďte všechny štítky za značky QINU, jak je uvedeno výše.
 * 3) Analyzujte vše ostatní od wikitextu po HTML.
 * 4) Nahraďte všechny značky QINU jejich příslušnými uloženými hodnotami v jediném průchodu.

Problém je zřejmě v tom, že v předchozím případě postrádá analýza textu wiki na SpecialPage poslední krok dekódování QINU (proč?), takže všechny značky QINU zůstávají nedekódované. (Může to být pozůstatek z použití stejné syntaxe k vyvolání transkluze stránky wikitextu, která se pouze vloží přímo do obsahu wikitextu hostitelské stránky a analyzuje, jak se používá k vyvolání transkluze speciální stránky, která nesmí být analyzována vůbec. Kdekoli je kód, který rozhodne "počkej, toto je speciální stránka -- nahraď ji QINU", měl by před provedením nahrazení QINU provést extra unstripGeneral.)

Takže jsem udělal následující -- po tomto řádku: ...Přidal jsem tyto řádky (druhý je pouze proto, že to definice funkce pro první doporučuje): Protože jsem to nyní zdokumentoval, samozřejmě na tom nyní najdu tragickou chybu a budu se cítit opravdu hloupě... ale dokud to vypadá, že to funguje, musel jsem to zde poznamenat. (Je také důležité upozornit na problém s řešením č. 1.) Také jsem to testoval pouze s MediaWiki 1.10.1. Problém stále existuje pod MW 1.14, ale toto řešení může nebo nemusí fungovat. --Woozle 18:26, 9 April 2009 (UTC)

Zobrazí se chybová stránka. Argumenty  a   specifikují klíče do $this->msg, nikoli text. Například:


 * 'error' odkazuje na text "".
 * 'badarticleerror' odkazuje na text "".

Můžete také určit objekty zpráv nebo přidat parametry:

WebRequest.php
Třída se používá k získávání informací z polí GET a POST. Použití tohoto se doporučuje přes přímý přístup k superglobálům. Objekt WebRequest je přístupný z rozšíření pomocí.

Database.php
MediaWiki má spoustu užitečných funkcí a návrhů pro interakci s databází pomocí třídy. Má také zajímavé schéma vyvažování zátěže. Doporučuje se tyto návrhy používat. Podívejte se na, kde najdete úplný seznam všech vhodných funkcí, protože tyto dokumenty vám řeknou pouze o neviditelných upozorněních. Viz.

User.php
Třída se používá k reprezentaci uživatelů v systému. SpecialPage->getUser by měl být použit k získání User objektu pro aktuálně přihlášeného uživatele. Používání globálního  je zastaralé

Title.php
Title představuje název stránky na wiki. To je užitečné, protože MediaWiki dělá všechny druhy escapování a speciální logiku pro názvy stránek, takže místo převádění vlastní funkce převodu názvu na URL vytvoříte objekt Title s názvem vaší stránky a poté použijete  k získání URL na tuto stránku.

Chcete-li získat objekt title pro vaši speciální stránku mimo třídu speciálních stránek, můžete použít. Poskytne vám lokalizovaný název v jazyce wiki.

Vlastní speciální stránky
Existují různé způsoby, jak poskytnout své vlastní speciální stránky, které nejsou součástí MediaWiki:


 * Jednou z metod je instalace rozšíření, které vygeneruje formulář pro vytvoření nebo úpravu článku. Seznam aktuálně dostupných rozšíření naleznete na stránce.
 * Můžete také napsat rozšíření, které poskytne vaši vlastní speciální stránku. Psaní vlastního rozšíření vyžaduje dovednost kódování PHP a zkušenosti s objektově orientovaným návrhem a databázemi. Budete také potřebovat vědět, jak používat kód k vytváření a úpravám článků MediaWiki. Další informace naleznete v této diskusi.
 * Můžete také zobrazit vlastní stránku prostřednictvím JavaScriptu místo výchozí chybové zprávy "Unknown special page" (neznámá speciální stránka) (nebo zprávy "This page is intentionally left blank." (tato stránka je záměrně ponechána prázdná), pokud používáte podstránku Special:BlankPage). V MediaWiki:Common.js vyhledejte, poté skryjte obsah vygenerovaný MediaWiki (stačí appendCSS  ) a vložte vlastní HTML  do   nebo  . Příklad viz meta:User:Krinkle/Tools/Real-Time Recent Changes.

Nastavení názvu rozšíření
MediaWiki nenastavuje název rozšíření, což je práce vývojáře. Při volání Special:Specialpages nebo načtení speciální stránky bude hledat název rozšíření. V sekci function execute( $par ) použijte metody OutputPage k pojmenování rozšíření jako:

Místo, kde lze rozšíření nalézt (jak je specifikováno tím, co je předáno do konstruktoru SpecialPage), je klíč --kromě, že se neuvádí velkými písmeny kvůli, interně používané funkci, která zjišťuje název (nebo, jak říkají, popis) speciální stránky,   název. Klíč "ThisIsACoolSpecialPage" by byl "thisacoolspecialpage".

Teoreticky může být  přetížen, aby se zabránilo interakci s mezipamětí zpráv, ale jak uvádí zdrojový kód: "Odvozené třídy to mohou přepsat, ale obvykle je jednodušší zachovat výchozí chování. Furthermore, this prevents the MediaWiki namespace from overloading the message, as below.

Lokalizace názvu rozšíření
So you've just installed a shiny new MediaWiki extension and realize: "Oh no, my wiki is in French, but the page is showing up as English!" Most people wouldn't care, but it's actually a quite simple task to fix (as long as the developer used the method explained on this page). No noodling around in source code. Let's say the name of the page is  and the name comes out to "List of Dirty Pages" but you want it to be (and excuse my poor French) "Liste de Pages Sales". Well, it's as simple as this:


 * 1) Navigate to MediaWiki:DirtyPages, this page may not exist, but edit it anyway
 * 2) Insert "Liste de Pages Sales" and save

And voilà (pardon the pun), the change is applied.

This is also useful for customizing the title for your wiki within your language: for instance, the developer called it "List of Dirty Pages" but you don't like that name, so you rename it "List of Pages needing Cleanup". Check out Special:Allmessages to learn more.

Also, if your extension has a large block of text that does change, like a warning, don't directly output the text. Instead, add it to the message cache and when the time comes to output the text in your code, do this:

Then this message too can be customized at MediaWiki:Dirtypageshelp.

See also.

Do not display your Special Page on Special:SpecialPages
Sometimes you may want to limit the visibility of your Special Page by removing it from Special:SpecialPages and making it visible to only those users with a particular right. You can do this in the constructor by passing in a  parameter; e.g., “editinterface”, a right only assigned to sysops by default; see the User rights manual for other available user rights.

Or you can create your own right in the setup file and assign it to sysops, e.g.:

and then call the constructor with your right:

Prevent access to your Special Page
Even if you restrict your page in the constructor, as mentioned above, it will still be viewable directly via the URL, e.g. at Special:MySpecialPage. In order to actually limit access to your SpecialPage you must call in the   method.

If you need more fine-grained control over permissions, you can override, and/or add whatever permissions-checking is required for your extension.

Disabling Special:UserLogin and Special:UserLogout pages
In LocalSettings.php you can use the to unset unwanted built-in special pages. See "making a few SpecialPages restricted" if you need conditional unsetting of special pages for example for certain user groups. The general message "You have requested an invalid special page." is shown if users try to access such unset special pages.

A different approach would be to use the DisabledSpecialPage callback. This approach may be preferred if you're only disabling the special page "temporarily", because the default message in this case would say: "" instead of pretending the page does not exist at all. This gives clear hint that the page maybe activated at a later time.

It is also possible to add custom lengthy explanation of why you're disabling the special page, by giving a message key as the second argument of the callback. To do so first create a system message "MediaWiki:Userlogout-disable-reason" and write all the explanation there. The message will be parsed in a block format. Then in LocalSettings.php add:

Logování
V rámci MediaWiki se zaznamenávají veškeré akce uživatelů realizované v rámci wiki, neboť cílem je spolupráce a transparentnost. Podívejte se na jak se to dělá.

Změna překládané zprávy zobrazované na Special:Specialpages
Pokud jste vývojář rozšíření, tak určitě máte implementovanou funkci, což je metoda popsaná na této stránce v sekci o názvu speciální stránky.

Od MediaWiki verze 1.21, může být výchozí jméno speciální stránky přepsáno pomocí systémové zprávy. Tahle funkcionalita má svůj význam především pro administrátory stránek nikoliv pro vývojáře rozšíření. Je pro to nutné vytvořit ve jmenném prostoru pro systémové zprávy stránku, jejíž název je tvoří následující řetězec   kde je místo řetězce   uvedeno, malými písmeny kanonické jméno speciální stránky. Konkrétně, pokud nechcete, aby se pro vaši jazykovou verzi zobrazoval výchozí překlad speciální stránky, musíte nejprve zjistit kanonické jméno této speciální stránky, které může být dejme tomu "Special:MyLittlePage". Pak máte dvě možnosti. Jednou z nich je vytvoření nové systémové zprávy. Nejprve si zvolíte nové kanonické jméno. Dejme tomu "MyLittleGroup", pak vytvoříte ve jmenném prostoru MediaWiki podle výše uvedeného schématu stránku "MediaWiki:Specialpages-specialpagegroup-mylittlepage", do níž napíšete zvolený řetězec nového kanonického jména, tedy "MyLittleGroup". "Special:MyLittlePage" se pak bude zobrazovat jako "MyLittleGroup", kterou pak lze lokalizovat přes systémovou zprávu "MediaWiki:Specialpages-group-mylittlegroup".

Druhá varianta pak je, podívat se na seznam speciálních stránek přes url Special:SpecialPages&uselang=qqx, zjistit jak vypadá řetězec překládané systémové zprávy, a ten pak lokalizovat, jako ostatní systémové zprávy přes podstránku /cs

Unlisting the page from Special:Specialpages
To remove a special page from the Special:Specialpages altogether, pass a as a third parameter to the SpecialPage parent constructor, as described in the SpecialPage Constructor section of this page. If you need more complicated logic to determine whether the page should be listed or not, you can also override the  function, but using the constructor parameter is simpler.

Getting a list of special pages and their aliases on a wiki
Simply use the "siteinfo" API module to retrieve the information from the wiki like e.g. /api.php?action=query&meta=siteinfo&siprop=specialpagealiases.

Viz též

 * HTMLForm – Tutoriál, o tvorbě formulářů používaných na speciálních stránkách