ProcessWire - Page Reference (Field): Unterschied zwischen den Versionen
| Zeile 17: | Zeile 17: | ||
$page->a_field_of_fieldtype_page = $anotherPageOrID; | $page->a_field_of_fieldtype_page = $anotherPageOrID; | ||
$page->save(); | $page->save(); | ||
| − | |||
| − | + | // more examples | |
| − | // examples | ||
$someOtherPage = $pages->get(1234); | $someOtherPage = $pages->get(1234); | ||
$page->your_page_field = $someOtherPage;// @note: not sure it works in all contexts | $page->your_page_field = $someOtherPage;// @note: not sure it works in all contexts | ||
| Zeile 31: | Zeile 29: | ||
$p->page_reference_field->add(1111); // add another page by id | $p->page_reference_field->add(1111); // add another page by id | ||
$p->save(); | $p->save(); | ||
| − | </ | + | </syntaxhighlight> |
=== Finde Seiten die auf Diese zeigen === | === Finde Seiten die auf Diese zeigen === | ||
Aktuelle Version vom 10. April 2024, 14:20 Uhr
Page Reference Felder enthalten Verbindungen zu anderen Seiten.
API Zugriff auf Page Reference[Bearbeiten]
Hinweis: Bei diesem Fieldtype muss man anschauen wie er im Backend eingestellt ist. Wenn er auf Single Page or False steht kann man nicht mit der add Funktion arbeiten. Diese Funktioniert nur mit dem Array (evtl. auch bei Single Page or Null Page - ungetestet).
Einfache Beispiele[Bearbeiten]
//Try turning off output formatting before setting values of fields, and also don't forget to save.
$page->of(false); // turn of output formatting
$page->a_field_of_fieldtype_page->add($anotherPageOrID);
$page->save();
//Or if your pagefield is set to a single value:
$page->of(false); // turn of output formatting
$page->a_field_of_fieldtype_page = $anotherPageOrID;
$page->save();
// more 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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
$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();
Entferne Seitenreferenzen[Bearbeiten]
https://processwire.com/talk/topic/1936-remove-entry-from-pagesfield-via-api/
$page->[field-name]->remove($[page-you-want-to-remove]);
$page->save();
//For example, if you wanted to remove the first page:
$p = $page->related_pages->first();
$page->related_pages->remove($p);
$page->save();
Überprüfe Seitenreferenz[Bearbeiten]
Assuming you're trying to remove a page from a page field if it is there already and otherwise add it there:
if($user->abos->has($p)) {
$user->abos->remove($p);
} else {
$user->abos->add($p);
}
Umgekehrter Zugriff auf Page Reference[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite zu finden.
page()->references()
und der
owner
Selektor