ProcessWire - $input Variable

Aus Wikizone
Version vom 1. Februar 2021, 17:41 Uhr von 109.192.169.230 (Diskussion) (→‎URL-Segmente)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Links

http://processwire.com/api/variables/input/

Einleitung

Die $INPUT Variable ist die Verbindung zu Get, Post und Cookie Variablen sowie URL-Segmenten und Seitennummerierung.

Wenn Variablen über die $input Variable abgerufen werden, hat das einige Vorteile gegenüber den entsprechenden PHP Superglobalen ($_GET...):

  • Rückgabe unabhängig von PHP magic_quotes. Variablen sind niemals escaped.
  • Gibt 0 zurück wenn eine Variable nicht existiert.
  • $input->whitelist als vertrauenswürdiger Speicherplatz für sanitized Variablen.
  • Variablen Zugriff über Objekt, Array oder über eine Funktion.

GET, POST und COOKIE Variablen

  • $input->get provides access to your GET variables
  • $input->post provides access to your POST variables
  • $input->cookie provides access to your COOKIE variables
  • Unten aufgeführte Funktionen funktionieren mit POST, GET und COOKIE

Hinweis: Variablen sind NICHT sanitized

Zugriff

GET / POST

$value = $input->get->name;   // access as object property
$value = $input->get['name']; // access as array index
$value = $input->get('name'); // access as function 
$value = $input->post->name;   // access as object property
//... you name it

Nicht vorhanden oder leer ?

if($input->post->hello === null) echo "hello doesn't exist";
    else if(!$input->post->hello) echo "hello exists, but is blank";

Iterieren

foreach($input->get as $key => $value)
    echo htmlentities("$key = $value") . "<br />";

Variablen Zählen

echo "There are " . count($input->cookie) . " cookie variables";

$INPUT->WHITELIST()

Wenn man eine Variable aus einer Nutzereingabe überprüft und Sanitized hat, kann man sie in die Whitelist packen. Dadurch hat man selbst den Überblick welche Variablen bereits gesäubert sind. Manche Module in ProcessWire (z.B. der Pager) greifen auf die Whitelist zu.

$input->whitelist($key, $value)	
//Set a whitelist value
$input->whitelist($key)	
//Get a whitelist value

Beispiel

// sanitize the search text and whitelist it
$value = substr(strip_tags($input->get->query), 0, 50);
$input->whitelist('query', $value);
// in some other file, echo the search text in the input box
$value = htmlentities($input->whitelist->query, ENT_QUOTES);
echo "<input type='text' name='query' value='$value' />";

Hier wurde mit PHP gesäubert. Der Sanitizer von ProcessWire stellt aber bereits viele Funktionen für diesen Zweck zur Verfügung.

URL-Segmente

https://processwire.com/api/ref/wire-input/url-segment/

Wenn man in den Template-Einstellungen der Seite URL Segmente erlauben einschaltet, kann man die Segmente hinter der Seitenurl auswerten und im Template verarbeiten. Ohne diese Einstellung gibt es einen 404-Fehler

// Aufruf der Seite /path/to/page/
$input->urlSegment($n)	//Retrieve the $n'th URL segment (1–3*)
$input->urlSegment1	//Retrieve the first: /path/to/page/aaa/
$input->urlSegment2	//Retrieve the second: /path/to/page/aaa/bbb/
$input->urlSegment3	//Retrieve the third: /path/to/page/aaa/bbb/ccc/

Hinweis: Mehr als 3 Segmente kann man über die config.php erlauben:

$config->maxUrlSegments
  • Wenn für das Seitentemplate Caching aktiviert ist werden auch die Seitenvariationen gecacht

Seitenzahlen mit $input->pageNum

Seitenzahlen stehen am Ende der url in der Form

/path/to/some-page/page4
  • Die aktuelle Seitenzahl, kann man im Template über $input->pageNum abrufen:
$input->pageNum //Returns the current page number from the URL (1–999)
$page->pageNum // DEPRECATED
  • Sobald über einen Selector ein Parameter "limit=[n]" gesetzt ist versucht PW die aktuelle Seitenzahl über $input->pageNum abzurufen um so im Selektor den passenden Bereich zu finden.
  • Möchte man selber den Bereich bestimmen kann man auch über "start=[n]" die Seite selbst bestimmen.