Jump to content

Příručka:Databázová tabulka page_props

From mediawiki.org
This page is a translated version of the page Manual:Page props table and the translation is 100% complete.
Manuál:Obsah MediaWiki schéma databáze Tabulka page_props
Verze MediaWiki:
1.13

Tabulka page_props obsahuje vlastnosti o stránkách nastavené analyzátorem prostřednictvím ParserOutput::setPageProperty(), jako je zobrazení titulku a výchozí klíč kategorie. Zejména se zde automaticky zaznamenávají všechna kouzelná slova dvojitého podtržení. Také mnoho rozšíření používá tuto tabulku k ukládání svých vlastních dat. Vezměte prosím na vědomí, že během přepracování obsahu stránky dojde k vymazání všech vlastností co měla nastavena z této tabulky, a jejich nahrazení hodnotami novými, takže tahle tabulka není vhodná pro ukládání dat, která se nedají během přepracování obnovit.

Pole

pp_page

page_id , podle kterého je indexován pár název/hodnota

pp_propname

Název vlastnosti stránky

pp_value

Hodnota vlastnosti stránky

pp_sortkey

Verze MediaWiki:
1.24

Je to proto, aby bylo možné efektivně vyhledávat stránky a třídit je podle hodnoty vlastnosti (viz úkol T60032).

Přehled změn ve schématu tabulky

Verze MediaWiki:
1.38

DESCRIBE page_props;

+-------------+------------------+------+-----+---------+-------+
| Field       | Type             | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+-------+
| pp_page     | int(10) unsigned | NO   | PRI | NULL    |       |
| pp_propname | varbinary(60)    | NO   | PRI | NULL    |       |
| pp_value    | blob             | NO   |     | NULL    |       |
| pp_sortkey  | float            | YES  |     | NULL    |       |
+-------------+------------------+------+-----+---------+-------+
Verze MediaWiki:
1.24 – 1.37

DESCRIBE page_props;

+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| pp_page     | int(11)       | NO   | PRI | NULL    |       |
| pp_propname | varbinary(60) | NO   | PRI | NULL    |       |
| pp_value    | blob          | NO   |     | NULL    |       |
| pp_sortkey  | float         | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+
Verze MediaWiki:
1.19 – 1.23

DESCRIBE page_props;

+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| pp_page     | int(11)       | NO   | PRI | NULL    |       |
| pp_propname | varbinary(60) | NO   | PRI | NULL    |       |
| pp_value    | blob          | NO   |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+

Indexy

Verze MediaWiki:
1.32

SHOW INDEX IN page_props;

+------------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name                 | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| page_props |          0 | PRIMARY                  |            1 | pp_page     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page_props |          0 | PRIMARY                  |            2 | pp_propname | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page_props |          0 | pp_propname_page         |            1 | pp_propname | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page_props |          0 | pp_propname_page         |            2 | pp_page     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page_props |          0 | pp_propname_sortkey_page |            1 | pp_propname | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page_props |          0 | pp_propname_sortkey_page |            2 | pp_sortkey  | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
| page_props |          0 | pp_propname_sortkey_page |            3 | pp_page     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+------------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

Ukázkový dotaz

Zde je ukázkový dotaz k nalezení používaných vlastností stránky (viz také API:Pagepropnames ).

MariaDB [enwiki_p]> SELECT DISTINCT pp_propname FROM page_props;
+------------------------------+
| pp_propname                  |
+------------------------------+
| defaultsort                  |
| disambiguation               |
| displaytitle                 |
| forcetoc                     |
| graph_specs                  |
| hiddencat                    |
| index                        |
| jsonconfig_getdata           |
| kartographer                 |
| kartographer_frames          |
| kartographer_links           |
| newsectionlink               |
| nocontentconvert             |
| noeditsection                |
| noexternallanglinks          |
| nogallery                    |
| noindex                      |
| nonewsectionlink             |
| notitleconvert               |
| notoc                        |
| page_image                   |
| page_image_free              |
| page_top_level_section_count |
| score                        |
| staticredirect               |
| templatedata                 |
| wikibase-badge-Q17437796     |
| wikibase-badge-Q17437798     |
| wikibase-badge-Q17506997     |
| wikibase-badge-Q17559452     |
| wikibase-badge-Q17580674     |
| wikibase-badge-Q20748091     |
| wikibase-badge-Q20748092     |
| wikibase-badge-Q20748093     |
| wikibase-badge-Q20748094     |
| wikibase-badge-Q51759403     |
| wikibase-shortdesc           |
| wikibase_item                |
+------------------------------+

Jednoduchý příklad využití této tabulky u rozšíření

This example code is very old. It only works on pre-MW1.35 wikis.

Zde je příklad rozšíření, které ukládá svou vlastní vlastnost stránky do tabulky page_props. Definuje dva tagy analyzátoru (háčky) <getprop> a <setprop> které manipulují s jeho vlastností s názvem SimpleSetPropExtension. Umožňují editoru wiki nastavit hodnotu vlastnosti ve wikitextu pomocí <setprop>Nějaký náhodný text</setprop> a zobrazit její hodnotu pomocí < getprop/> (pro aktuální stránku) nebo pomocí <getprop page="nějaká stránka"/> (pro její hodnotu na jiné stránce strana).

<?php
 
$wgHooks['ParserFirstCallInit'][] = 'wfSampleParserInit';

function wfSampleParserInit( Parser &$parser ) {
        // This does <setprop>Some random text</setprop>
        // And then <getprop/> to retrieve a prop
        // Or <getprop page="somepage"> to retrieve for
        // something other than the current page.

        $parser->setHook( 'getprop', 'wfSampleGetProp' );
        $parser->setHook( 'setprop', 'wfSampleSetProp' );
        // Always return true from this function. The return value does not denote
        // success or otherwise have meaning - it just must always be true.
        return true;
}

function wfSampleSetProp( $input, array $args, Parser $parser, PPFrame $frame ) {
        $parsed = $parser->recursiveTagParse( $input, $frame );
        // Since this can span different parses, we need to take account of
        // the fact recursiveTagParse only half parses the text. or strip tags
        // (UNIQ's) will be exposed. (Alternative would be to just call
        // $parser->replaceLinkHolders() and $parser->mStripState->unstripBoth()
        // right here right now.
        $serialized = serialize( $parser->serializeHalfParsedText( $parsed ) );
        $parser->getOutput()->setPageProperty( 'SimpleSetPropExtension', $serialized );

        // Note if other pages change based on a property, you should see $wgPagePropLinkInvalidations
        // to automatically invalidate dependent page. In this example that would be pages that
        // use <getprop page="something>. However that would require adding a linking table
        // (since none of the standard ones work for this example) which is a bit beyond the
        // scope of this simple example.

        return '';
}
function wfSampleGetProp( $input, array $args, Parser $parser, PPFrame $frame ) {
        $pageId = $parser->getTitle()->getArticleID();
        if ( isset( $args['page'] ) ) {
              $title = Title::newFromText( $args['page'] );
              if ( !$title || $title->getArticleID() === 0 ) {
                          // In a real extension, this would be i18n-ized.
                          return '<span class="error">Invalid page ' . htmlspecialchars( $args['page'] ) . ' specified.</span>';
              }
              
              // Do for some page other then current one.
              $dbl = MediaWikiServices::getInstance()->getDBLoadBalancer();
              $dbr = $dbl->getConnection( DB_REPLICA );
              $propValue = $dbr->selectField( 'page_props', // table to use
                          'pp_value', // Field to select
                          [ 'pp_page' => $title->getArticleID(), 'pp_propname' => "SimpleSetPropExtension" ], // where conditions
                          __METHOD__
              );
              if ( $propValue === false ) {
                          // No prop stored for this page
                          // In a real extension, this would be i18n-ized.
                          return '<span class="error">No prop set for page ' . htmlspecialchars( $args['page'] ) . ' specified.</span>';
              }
              // We found the prop. Unserialize (First level of serialization)
              $prop = unserialize( $propValue );

              if ( !$parser->isValidHalfParsedText( $prop ) ) {
                          // Probably won't ever happen.
                          return '<span class="error">Error retrieving prop</span>';
              } else {
                          // Everything should be good.
                          return $parser->unserializeHalfParsedText( $prop );
              }
        } else {
              // Second case, current page.
              // Can't query db, because could be set earlier in the page and not saved yet.
              // So have to use the parserOutput object.

              $prop = unserialize( $parser->getOutput()->getPageProperty( 'SimpleSetPropExtension' ) );

              if ( !$parser->isValidHalfParsedText( $prop ) ) {
                          // Probably won't ever happen.
                          return '<span class="error">Error retrieving prop</span>';
              } else {
                          // Everything should be good.
                          return $parser->unserializeHalfParsedText( $prop );
              }
        }
}


Související odkazy