Virtuelle Seiten können auf Seiten unterschiedlicher Typen zeigen, und es gibt keine Durchsetzung, dass alle diese Seiten ContentPages
sind, oder zumindest Seiten, die ein Hightlighted
db-Feld haben. Sie können dies manuell sicherstellen, wenn Sie Ihre SiteTree
erstellen, aber Benutzer könnten mitkommen und es vermasseln, also denken Sie daran.
Hier ist ein Pseudo-Code, der Ihnen den Einstieg erleichtern könnte. Es wird davon ausgegangen, dass alle virtuellen Seiten ContentPages
sind. Wenn Sie mehrere Typen von VirtualPages
haben, die von einem AreaPage
referenziert werden, ist dies wahrscheinlich nicht ausreichend.
$virtualPages = $myAreaPage->RelatedVirtualPages();
$contentSourcePages = ContentPage::get()->byIDs($virtualPage->column('CopyContentFromID'));
$sortedSourcePages = $contentSourcePages->sort('Highlighted','ASC');
möglicherweise könnte Sie auch ein innerJoin
verwenden, aber dann muss man mit _Live Tabellen behandeln und möglicherweise mehr Seitentabellen (auch hier nur, wenn nicht ContentPage
als VirtualPage
mit), die mit einigen komplizierten Szenarien führen könnte.
aktualisieren
Also, in meinen eigenen Worten zusammenfassen, müssen Sie eine Liste der zu einem bestimmten AreaPage
verknüpft VirtualContentPages
auf dem Highlighted
sortiert Feld aus der ContentPage
, die jeder VirtualContentPage
Links zu. Wenn diese Zusammenfassung genau ist, würde diese Arbeit:
$sortedVirtualPages = $myAreaPage->RelatedVirtualPages()
->innerJoin('ContentPage', '"ContentPage"."ID" = "VirtualContentPage"."CopyContentFromID"')
->sort('Highlighted DESC');
Sollte nicht 'RelatedVirtualPages' => 'VirtualPages' sollte 'RelatedVirtualPages' => 'VirtualPage' sein? – jberculo
Ja, du hast recht :-) Aktualisierte Frage –