Wie kann ich das MVC-Modell zum Laden, Ändern und Speichern eines Datensatzes verwenden?

7

Nach dem googeln usw. Ich habe in dem Code unten angekommen Hinzufügen eine neue Kategorie Joomla , so dass alle Plug - Veranstaltungen, etc. getan.

$basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
require_once $basePath.'/models/category.php';
$catmodel = new CategoriesModelCategory(array('table_path' => $basePath.'/tables'));

$myArrayOfData = array('id'=>'0','title'='my title'...);
$catmodel->save($myArrayOfData);

So wie es jetzt ist, verwende ich denselben Code zum Aktualisieren des Datensatzes, aber anstelle einer neuen Kopie des hinzuzufügenden Datenarrays verwende ich SQL, um den vorhandenen Datensatz als Array abzurufen, und ändere und speichere ihn dann auf dieselbe Weise.

Dies "funktioniert", scheint aber nicht der richtige Weg zu sein, daher bin ich gespannt, wie das Modell mit der ID der Kategorie geladen und dann mit seinen Methoden geändert / gespeichert werden kann. Ich habe versucht, dem Code zu folgen, der ausgeführt wird, wenn die Kategoriekomponente dies tut, aber es sind zu viele Dinge im Gange, als dass ich festlegen könnte, wie es gemacht wird.

BIP
quelle

Antworten:

3

Angenommen, Sie haben die Kategorie-ID, die in $ id gespeichert ist. Sie können das Kategoriemodell wie zuvor instanziieren:

$basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
require_once $basePath . '/models/category.php';
$catModel = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
$id = 11;

Jetzt haben Sie zwei Methoden:

Methode 1 - Ohne JTable-Objekt

$item = $catModel->getItem($id);
$catModel->save('id' => $id, 'parent_id' => $item->parent_id, 'title' => 'My New Title'); // parent_id should be defined otherwise a warning will be displayed

Methode 2 - Mit JTable-Objekt

$catTable = $catModel->getTable();
$catTable->load($id);
$catTable->title = 'My New Title';

$catTable->check();
$catTable->store();

Hinweis

Nur mit dem ersten Verfahren onContentBeforeSaveund onContentAfterSaveEreignisse werden gefeuert.

Farahmand
quelle
Aha ... lade den Tisch! ... immer so offensichtlich nach der Tatsache, lol ...
BIP
Ich erhalte mit diesem Code Fehler, die keine Objekte sind. Ich habe die Frage aktualisiert, um Ihre Antwort aufzunehmen, die zeigt, wo.
BIP
@GDP, ich habe meine Antwort geändert. Könnten Sie es überprüfen und uns das Ergebnis mitteilen?
Farahmand
Ich erhalte den Fehler CategoriesTableCategory::bind(*NULL*), aber Ihre geänderte Antwort verwendet jTable, nicht das Modell, nach dem ich suche. Wird dies die Plugin-Ereignisse wie onContentAfterSave auslösen?
BIP
@GDP, ich habe meine Antwort bearbeitet und es funktioniert jetzt. Die saveMethode wird verwendet, um Formulare an Daten zu binden. Ich habe es durch checkund storeMethoden ersetzt. Jetzt wird die Tabelle vom Modell aufgerufen, sodass Sie auch das Kategoriemodell in Ihren Händen haben.
Farahmand