Für ein Kundenprojekt mussten Daten aus einem alten Auftritt übernommen werden. Problemstellung waren dabei Dokumente mit Multihref, die per Import-Script mit Objekten (Immobilien) gefüllt werden mussten.
Folgender Code erfüllt diese Aufgabe:
$objekt = Object_Objekt::getByPath("/objekte/".$objekt_key);
$document = Document::getById($document_id);
$multihref = $document->getElement("objekte");
$data = $multihref->getDataForResource();
$data[] = array("id" => $objekt->getId(), "path" => $objekt->getFullPath(), "type" => "object", "subtype" => "objekt");
$multihref->setDataFromEditmode($data);
$multihref->getResource()->save();
$objekt_document->update();
Die ganze Sache hat nur einen Schönheitsfehler: die Dependencies werden nicht mit aktualisiert, erst bei händischem Speichern des Dokuments werden diese aktualisiert.
Ich hab zwar versucht, diese ebenfalls per Script zu ergänzen, dies hatte aber keine Wirkung:
// Das funktioniert nicht... $objekt_document->clearDependedCache(); $document_dependencies = $objekt_document->getDependencies(); $document_dependencies->addRequirement($objekt->getId(), "object"); $document_dependencies->save();
Für Hinweise, was hier falsch läuft, wäre ich daher dankbar
EDIT:
Zita Kemeny hat in den Kommentaren eine Lösung zur Verfügung gestellt.
Die sieht, angepasst auf vorhergehendes Problem, folgendermaßen aus:
$dependency = new Dependency(); $dependency->setSourceId($document_id); $dependency->setSourceType(“document”); $dependency->addRequirement($objekt->getId(), “object”); $dependency->save();
Danke, Zita!
Das Google+ Profil des Authors
Hallo Thomas,
hast du inzwischen eine Lösung gefunden?
Gruß,
Zita
Leider nicht
Ich tippe mal, das hat doch was mit den Caches zu tun, ggfs. müssen da andere vor Erzeugung deaktiviert werden – das konnte ich aber noch nicht verifizieren.
Sowas wie:
Pimcore_Model_Cache::disable();
Das ist jetzt aber nur eine unqualifizierte Vermutung “zwischenrein”
Kannst Du mich da ggfs. auf dem Laufenden halten wenn Du eine Lösung hast?
Wann ich ein asset habe die shon dependencies hat dann :
$this_dependency = $asset->getDependencies();
$this_dependency->addRequirement(505, “object”);
$this_dependency->save();
es funktioniert prima.
Ich weiss noch nicht wie ist beim ein asset die noch keine dependency hat weil da bis jetzt habe ich keine Lösung die es geht.
Ich habe geschafft die ‘Required By’ zu füllen für ein asset indem in mein Object in ein WYSWYG Feld habe ich ein img tag, wie zum Beispiel: und dann beim spechern dieses Objekt hat schon die ‘Dependency’ ausgefüllt.
Ich habe die Lösung auch falls ein asset hat noch keine Dependency:
$this_dependency = new Dependency();
$this_dependency->setSourceId(530);
$this_dependency->setSourceType(“asset”);
$this_dependency->addRequirement(505, “object”);
$this_dependency->save();
Du kannst in deinem Fall ändern weil du Dokumente hast.
Ich muss nur sagen dass hier es ist dann so das diese Asset hat beim ‘Requires By’ diese Objekt.
Ich denke kann mann auch andersrum.
Gruß,
Zita
P.S. Ich bin dankbar für dein blog weil hat mir auch vieles gelernt in Pimcore. Danke dir.
Vielen Dank für die Lösung – das sieht schlüssig aus!
Ich werde den Eintrag entsprechend ergänzen