ProcessWire - Page Reference (Field): Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 60: Zeile 60:
 
  $myPage->save();
 
  $myPage->save();
  
== Reverse Page Reference ==
+
== Umgekehrter Zugriff auf Page Reference ==
 
Manchmal möchte man von der "anderen Seite" also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.
 
Manchmal möchte man von der "anderen Seite" also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.
  

Version vom 16. Juli 2021, 09:54 Uhr

Page Reference Felder enthalten Verbindungen zu anderen Seiten.

API Zugriff auf Page Reference

Einfache Beispiele

// examples
$someOtherPage = $pages->get(1234);
$page->your_page_field = $someOtherPage;// @note: not sure it works in all contexts
$page->your_page_field->add($someOtherPage);
$page->your_page_field->add(1234);

// Manipulate page reference this way...
$p = $pages->get(1234);
$p->of(false); // always switch of output formatting when manipulating and save back values
$p->page_reference_field->add(1111); // add another page by id
$p->save();

Finde Seiten die auf Diese zeigen

https://processwire.com/api/ref/page/references/

Available since version 3.0.107.

// basic usage
$items = $page->references();
// usage with all arguments
$items = $page->references($selector = , $field = );

Komplexe Referenzierung

https://processwire.com/talk/topic/1224-selector-and-page-reference-field/

Finde Seiten mit dem Template poi die ein Seitenreferenz auf eine Seite mit dem Titel Zoo haben. Das PR Feld hat den Namen poi_type

$pr = $pages->get("title=Zoo"); // $pr enthält das Pageobjekt
$poi = $pages->find("template=poi, poi_type=$pr"); // Pageobjekt als Parameter für den Selektor

Es kann auch ein PageArray Objekt zum Suchen genutzt werden.

$prs = $pages->find("title=Zoo|Theme park|Museum"); // maybe also use the name or id
$poi = $pages->find("template=poi, poi_type=$prs");

PageReference in Repeater

template client enthält einen Repeater r_assignment und dieser die Seitenreferenzen pr_contact und pr_function

pr_contact enthält PageReferences auf Seiten mit dem Template contact.

Ich möchte in einer Seite mit dem Template contact alle Seiten des Templates client finden, die im Repeater Feld r_assignment ein Pagereference pr_contact haben dass auf meine Seite (also $page) zeigt

$clients = pages()->find("template=key_account_client,r_contact_function_assignment.pr_contact=$page,sort=title");

Erstelle Seitenreferenzen

$myPage->pReferences = $page; // creates one reference
$myPage->save(); // make sure to save page somewhere

This of course doesn't work with multiple pages. I tried this (found from current docs, used in images):

$myPage->pReferences->add($page); // adds a page reference, allows more than one add (if field allows this).
$myPage->save();

Umgekehrter Zugriff auf Page Reference

Manchmal möchte man von der "anderen Seite" also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.

Hilfsmodule

Ich editiere eine Seite und möchte eine Referenz auf diese Seite bearbeiten oder einfügen. Ich möchte die Seite aber nicht verlassen müssen sondern alles in einem Rutsch erledigen.

http://modules.processwire.com/modules/admin-page-field-edit-links/ 

Ermöglicht das Bearbeiten von Seitenreferenzen in einem Inline Frame.

http://modules.processwire.com/modules/connect-page-fields/

Ermöglicht das Synchronisieren von zwei Seiten die sich gegenseitig referenzieren. In mySQL würde man hier lieber eine m:n Verbindung nehmen anstatt zwei Felder zu nutzen, da man hier zwei Datensätze pflegt (redundant und Gefahr das es mal asynchron ist). Vorteil ist aber, dass man über die API Performancevorteile hat, weil man niemals eine Suche nach "was zeigt hierher" machen muss.

Selektoren die helfen

Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite zu finden.

page()->references()

und der

owner 

Selektor