Jump to content

HTMLForm

From mediawiki.org
This page is a translated version of the page HTMLForm and the translation is 100% complete.

HTMLForm je třída pro zpracování všeho, co souvisí s formuláři uživatelského rozhraní. MediaWiki 1.16 a novější obsahují HTMLForm v HTMLForm.php.

Výukový program HTMLForm ukazuje základy HTMLForm.

Parametry

Přesná specifikace pro:

Parametr Typ Popis Default
type řetězec Typ obsahu formuláře, který se má vytvořit. Například: text, radio nebo multiselect. Tyto jsou namapovány na konkrétní podtřídy v HTMLForm.

To se zhruba promítá do atributu typu ‎<select>. Pokud není zadána hodnota 'class', použije se tato hodnota jako mapa přes hodnotu HTMLForm::$typeMappings pro získání názvu třídy.

class řetězec Podtřída PHP, která se má použít pro obsah tohoto formuláře. To provede stejnou funkci jako parametr typu, ale přímočařeji. Toto NENÍ třída CSS!
size celé číslo Nastavuje délku textových polí
maxlength celé číslo Nastavuje maximální délku textových polí
min celé číslo Minimální částka pro danou hodnotu
max celé číslo Maximální částka pro danou hodnotu
invert boolean Ve výchozím nastavení nastavit vstupy typu přepínač na zaškrtnuté
options pole Možnosti, které lze prezentovat v elementu formuláře s vícenásobným výběrem, přepínačem nebo výběrem. Mapuje nezpracované textové popisky na hodnoty. Některé typy polí podporují víceúrovňová pole. Přepíše options-message.
rows pole Řádky, které se mají zobrazit v elementu formuláře checkmatrix, nebo počet řádků zobrazených pro element formuláře textarea
columns pole Sloupce, které se mají prezentovat v elementu formuláře checkmatrix
force-options-off pole Možnosti pro nastavení nezaškrtnutých a zakázaných hodnot v elementu formuláře checkmatrix
force-options-on pole Možnosti pro nastavení zaškrtnutých a povolených hodnot v elementu formuláře checkmatrix
section řetězec Klíč pro zobrazení zprávy i18n jako záhlaví sekce nebo podsekce. Podsekce by měly používat znak '/', např. foo/bar/baz vytvoří preferenci 'baz' uvnitř sekce 'bar', která se nachází uvnitř sekce 'foo'.
label-message,

buttonlabel-message

řetězec Klíč pro zprávu i18n, která se zobrazí jako popisek pro vstup/tlačítko formuláře. Klíč zprávy nebo objekt pro zprávu, který se má použít jako popisek. Může to být pole klíčů zpráv a poté parametrů zprávy.
label,

label-raw, buttonlabel

řetězec Popisek pro vstup/tlačítko formuláře. Přepsáno parametrem label-message.
vertical-label boolean Nastavte na hodnotu true, pokud chcete, aby se popisek zobrazoval nad možnostmi, nikoli nalevo od nich.
id řetězec Atribut ID, který se má přiřadit vstupu
cssclass řetězec Atribut třídy, který se má přiřadit vstupu
csshelpclass řetězec CSS třída používaná ke stylování textu nápovědy
validation-callback pole Třída a funkce, které se mají použít pro ověření vstupu. Podívejte se na stránku HTMLFormField::validate().
filter-callback pole Třída a funkce, které se mají použít pro filtrování vstupu. To vám dává možnost upravit zadanou hodnotu před jejím zpracováním. Podívejte se na stránku HTMLFormField::filter().
help-message řetězec Klíč pro zobrazení zprávy i18n přímo pod prvkem formuláře. Přepíše help-messages a help. Může to být pole klíčů zpráv a poté parametrů zprávy.
help řetězec Zpráva, která se zobrazí přímo pod prvkem formuláře a použije se jako text nápovědy.
tooltip řetězec Přípona klíče pro zprávy i18n, která se má použít pro atributy titulku a nebo accesskey (tooltip-YOURVALUE a accesskey-YOURVALUE)
placeholder řetězec Hodnota, která se má použít pro atribut zástupného symbolu HTML5
placeholder-message řetězec Klíč pro zprávu i18n, která se zobrazí jako zástupný symbol
disabled boolean Zakázat úpravy a odeslání vstupu z formuláře
readonly boolean Zakázat úpravu vstupu ve formuláři
required boolean Pokud je hodnota true, vstup nemůže zůstat prázdný. Je předáváno objektu, což značí, že se jedná o povinné pole.
name řetězec Přepsat název vstupu.

Pokud chcete jiný název (např. bez předpony "wp"), zadejte jej zde a bude použit bez úprav.

wp{$fieldname}
dir řetězec Směr prvku.
'options-messages' pole asociativní mapování klíčů zpráv na hodnoty pomocí pole. Některé typy polí podporují víceúrovňová pole.

Overwrites 'options' and 'options-message'.

'options-message' pole klíč zprávy nebo objekt, který má být analyzován za účelem extrahování seznamu možností (například ipbreason-dropdown).
'help-messages' pole pole klíčů/objektů zpráv. Stejně jako výše, každá položka může být polem klíčů zpráv a poté parametrů. Přepíše help.
'help-inline' pole Zda se bude text nápovědy (definovaný pomocí výše uvedených možností) zobrazovat přímo za vstupním polem, a ne ve vyskakovacím okně.

Only used by OOUI form fields.

true
'hide-if' pole Výraz zadaný jako pole určující, kdy má být pole skryto. První hodnota pole musí být logický operátor výrazu.

Podporované výrazy:

Výraz Syntaxe Description
'NOT' [ 'NOT', array $expression ] Skrýt pole, pokud daný výraz není pravdivý.
'===' [ '===', string $fieldName, string $value ] Skrytí pole, pokud jiné pole identifikované hodnotou $field má hodnotu $value.
'!==' [ '!==', string $fieldName, string $value ] Same as [ 'NOT', [ '===', $fieldName, $value ]
'OR', 'AND', 'NOR', 'NAND' [ 'XXX', array $expression1, ..., array $expressionN ] To hide a field if one or more (OR), all (AND), neither (NOR) or not all (NAND) given expressions are evaluated as true.

Výrazy budou předány frontendovému modulu JavaScriptu, který bude průběžně aktualizovat viditelnost pole.

Note, you can only check expressions against preferences. If you want to hide preferences based on other criteria you should consider altering the type to hidden based on that condition. For example, do not check ['!==', 'skin', 'minerva'] to check the current skin, as this will not work as skin is the preference for the desktop skin which will not hold true for a mobile page view or a view using useskin=minerva.

'disable-if' pole Výraz zadaný jako pole uvádějící, kdy má být pole zakázáno, s použitím stejné syntaxe jako podmínky hide-if popsané výše.
nodata boolean Pokud je nastaveno (na libovolnou hodnotu, která převede na true), data pro toto pole nebudou načtena ze skutečného požadavku. Místo toho se jako hodnota tohoto pole vždy nastaví výchozí data.
default řetězec (nebo pole) Výchozí hodnota(y) pro pole (nezaměňovat s $wgDefaultUserOptions ). Rozšíření/vzhledy, které přidávají předvolby pomocí háčku, musí pro nastavení výchozí hodnoty použít UserGetDefaultOptions .

Příklad použití

třída SpecialTestForm

<?php

class SpecialTestForm extends SpecialPage {
	public function __construct() {
		parent::__construct( 'TestForm' );
	}

	public function execute( $par ) {
		$this->getOutput()->setPageTitle( 'Test form' );

		$formDescriptor = [
			'myfield1' => [
				'section' => 'section1/subsection',
				'label-message' => 'testform-myfield1',
				'type' => 'text',
				'default' => 'Meep',
			],
			'myfield2' => [
				'section' => 'section1',
				'class' => 'HTMLTextField', // HTMLTextField stejné jako typ 'text'
				'label-message' => 'testform-myfield2',
			],
			'myfield3' => [
				'class' => 'HTMLTextField',
				'label' => 'Foo bar baz',
			],
			'myfield4' => [
				'class' => 'HTMLCheckField',
				'label' => 'This be a pirate checkbox',
				'default' => true,
			],
			'omgaselectbox' => [
				'class' => 'HTMLSelectField',
				'label' => 'Select an oooption',
				'options' => [
					'Pirates' => 'pirate',
					'Ninjas' => 'ninja',
					'Back to the NINJAR!' => 'ninjars',
				],
			],
			'omgmultiselect' => [
				'class' => 'HTMLMultiSelectField',
				'label' => 'Weapons to use',
				'options' => [
					'Cannons' => 'cannon',
					'Swords' => 'sword',
				],
				'default' => [ 'sword' ],
			],
			'radiolol' => [
				'class' => 'HTMLRadioField',
				'label' => 'Who do you like?',
				'options' => [
					'Pirates' => 'pirates',
					'Ninjas' => 'ninjas',
					'Both' => 'both',
				],
				'default' => 'pirates',
			],
		];

		$htmlForm = new HTMLForm( $formDescriptor, $this->getContext() );
		$htmlForm
			->setSubmitText( 'Foo submit' )
			->setSubmitCallback( [ $this, 'trySubmit' ] )
			->show();
	}

	public function trySubmit( $formData ) {
		if ( $formData[ 'myfield1' ] === 'Fleep' ) {
			return true;
		}

		return 'Fail';
	}
}

$wgSpecialPages['TestForm'] = 'SpecialTestForm';

i18n/en.json

{
	"@metadata": {
		"authors": [
			"MW_Kappa"
		]
	},
	"testform-desc": "some informative text for page Special:Version",
	"section1": "display text for section1",
	"subsection": "display text for subsection"
}

Formáty zobrazení

Výchozí formát zobrazení pro HTMLForm je table s popisky v levém sloupci a vstupy v pravém sloupci. Je možné vybrat několik různých formátů, např. $htmlForm->setDisplayFormat( 'div' ); použije rozvržení založené na divech. Existují i ​​vzácnější formáty zobrazení, jako například raw a inline.

Verze MediaWiki:
≥ 1.26

Chcete-li změnit formulář tak, aby používal sadu nástrojů OOUI pro prvky HTMLForm, počínaje MediaWiki 1.26 budete muset v HTMLForm::factory použít jako formát zobrazení 'ooui':

$htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );

Historické poznámky

HTMLForm byl zaveden uživatelem Werdna v r48740 jako součást přepracování jeho systému preferencí. Historicky MediaWikis od verze 1.4.0 do verze 1.11.0 obsahovaly jinou třídu HTMLForm, kterou napsali Hashar a JeLuF. Tato třída HTMLForm byla odstraněna v r29245.