2016-09-18 1 views
1

Ich habe eine ModularPage Klasse, die Page erweitert. Seite hat ein 'Thumbnail' Image.Bild nicht geladen durch ORM in SS4

Ich habe eine Route zum Ajaxing einer ModularPage Sammlung. Ich nehme die Sammlung mit den folgenden:

Die ThumbnailID ist ausgefüllt, aber das Thumbnail-Objekt ist null. Ist das ein Fehler? Muss ich in SS4 etwas anderes machen?

Update: Wenn ich also direkt vom Browser auf die Route zugreife, wird der Link korrekt ausgefüllt. Beim Zugriff über Ajax ist Link null.

Update 2: Das Bild Link() funktioniert auch wie normal, wenn von derselben Klasse zugegriffen wird, nur wenn es durch Ajax aufgerufen wird, wird es gestrippt.

+0

Nur aus Neugier, wenn Sie Is als Real-Page-Klasse erhält die magische Methode thumbnail() dann die Korrektheit Entität zurückgeben. ZB get_by_id ("Seite" oder wie oit sollte mit dem Namespacing verwendet werden. Haben Sie keine 4.0 Build auf der Hand, um es gerade jetzt zu testen. –

+0

Auf Filterung ID auch die richtige Klassenname, um die Objekte direkt zu erhalten, wenn Sie a Datenfeld, das nicht Teil der primären Abfrage ist, die es Datenbankanforderungen für jede Iteration anfordert. Page :: get() -> filter ("parentId", was auch immer); sollte optimaler sein als SiteTree :: get, da letzteres eine Iteration verursachen würde lade neue Daten für jedes der Elemente, das heißt, wenn ich verstanden habe, wie es auf atleast 3.2 richtig funktioniert :) –

+0

@FinBoWa Ich habe versucht, die echte 'Page' Klasse aufzurufen, immer noch null, wenn sie vom Endpunkt empfangen wird. Guter Ruf nach der Effizienz der Verwendung von "Page" über "SiteTree", das werde ich in Zukunft tun. – nickspiel

Antwort

1

Damian half Art dieses auf der GitHub Ausgabe aus: https://github.com/silverstripe/silverstripe-framework/issues/6048#issuecomment-248572357

Es gibt eine $owns statische Array, das das übergeordnete Objekt, welche Beziehungen zu veröffentlichen sagt, wann es veröffentlicht wird.

die folgende Hinzufügen verursacht das Thumbnail veröffentlicht werden und wird nun korrekt angezeigt:

class Page extends SiteTree { 
    private static $owns = [ 
     'Thumbnail' 
    ]; 
} 

Im Moment dies für die Veröffentlichung von Vermögenswerten wie die einzige Methode sieht. Es sieht so aus, als würden die Jungs in Zukunft eine Schaltfläche zum Veröffentlichen von Assets hinzufügen.

-1

Sie können $page->Thumbnail()->Filename verwenden, um den Dateinamen abzurufen und das Img-Tag selbst zu erstellen. Oder Sie können eine der Anbaumethoden verwenden wie $page->Thumbnail()->resize(1024,768);

https://docs.silverstripe.org/en/3.1/developer_guides/files/image/

Es gibt keine Link Methode auf Image.

+1

'Image' erbt den' Link' Funktion aus der 'File' Klasse. – 3dgoo