PDA

Zobacz pełną wersję : Przechwycenie wartości pola w trakcie zapisywania artykułu



washingtonplx
19-11-2017, 20:07
Chcę przechwycić dane zapisywane podczas tworzenia/ modyfikacji artykułu w flexicontent i zapisać je w oddzielnej tabeli. W tym celu utworzyłem w \plugins\system\flexisystem\flexisystem.php funkcję
public function onContentAfterSave($context, $item, $isNew, $data = array())

Podam fragment kodu pobierającego dane (cała reszta, zapis do MYSQL itp działa OK)

$pole->tytul = $item->title; // Tytuł artykułu - Pole "wbudowane"
$pole->jezyk $item->language; // Język w jakim jest napisany artykuł, ustawiany w trakcie modyfikacji przez usera - Pole "wbudowane"
$pole->tresc = $item->fields['text']->display; // Treść artykułu - Pole "wbudowane"
$pole->wiek = $item->fields['pole0203']->display; // Przykładowe dodatkowe pole utworzone przeze mnie o id 'pole0203'
// lub $pole->wiek = FlexicontentFields::getFieldDisplay($item, 'pole0203', null, 'display');


W trakcie edycji artykułu polecenia $item->XXX pobierają nowe (zaktualizowane) dane tylko wbudowanych standardowo pól, ale w przypadku dodatkowych pól pobiera stare dane
Przykład, mam artykuł:
Tytuł: XXX
Treść: XXXX XXXX XXXX
Wartość z pola "język" - X
Wartość z pola niestandardowego "wiek" -X

Modyfikuję dane na
Tytuł: YYY
Treść: YYYY YYYY YYYY
Wartość z pola "język" - Y
Wartość z pola niestandardowego "wiek" -Y

A w funkcji onContentAfterSave zwraca mi
Tytuł: YYY
Treść: YYYY YYYY YYYY
Wartość z pola "język" - Y
Wartość z pola niestandardowego "wiek" -X

Od dwóch dni szukam rozwiązania, ale brak. Bardzo proszę o pomoc.

Jola
20-11-2017, 01:56
Popatrz na funkcję onContentAfterSave() w pluginie system/fields/fields.php :)

washingtonplx
24-11-2017, 11:57
Dzięki za odpowiedź, ale dalej miałem problem. Żadne rozwiązanie nie działała, przeszukałem cały internet i cały czas zwracało starą wartość, nic lub 1. Nawet zrobiłem reinstalacje joomli. Bez instalacji dodatku flexicontent działało, ale z zainstalowanym komponentem już nie. Wreszcie po paru dniach metodą prób i błędów całkowicie przez przypadek udało mi się znaleźć rozwiązanie. Wystarczyło np przed
$pole->tytul = $item->title;
dodać jedną linie kodu i działa bez jakichkolwiek innych modyfikacji:

FlexicontentFields::getFields($item, $view, $_item_params = null, $aid = null, $use_tmpl = false);
Mam nadzieje, że komuś się przyda