PDA

Zobacz pełną wersję : Joomla 3.6 Tagi



lyczkul
12-01-2017, 15:38
Witam,

Piszemy w pracy własny modul do Joomli i chciałbym podpiąć tam moduł tagów który jest udostępniany od jakiegoś czasu, jednak wyszedł nam bardzo duży problem.
Korzystam z dokumentacji

https://docs.joomla.org/J3.x:Using_Tags_in_an_Extension

robiąc wszystko identycznie nowe rekordy się zapisują jednak tagi już kompletnie nie. Znalazłem pomoc pod linkiem

http://stackoverflow.com/questions/23031794/joomla-3-x-tags-in-custom-component-fails

jednak wpisując w pliku Table
JTableObserverTags::createObserver($this, array('typeAlias' => 'com_s4edu.pathofcertification'));

Wyrzuca mi błąd :

BłądZapisanie nie powiodło się z powodu następującego błędu: .

i tyle, wszystko z niego wiadomo:lol:

Teraz pytanie po pierwsze jakie dane należy uzupełnić w bazie danych tzn gdy dodaje nowy rekord do tabeli content_types jak to powinno wyglądać, z grubsza po kolej.
Druga rzecz jak w ogóle sprawić żeby tagi się dodawały i potem się wyświetlały, ew. jakiś link pożyteczny.

Jola
12-01-2017, 19:01
Możliwe, że w modelu -> funkcja save() jest problem z dodaniem błędów $this->setError()
Jeśli nadal jest problem to trzeba przekazać tą drogą (wyświetlić) informacje o zmiennych przekazanych do funkcji save().

lyczkul
13-01-2017, 09:49
8999

wszystkie dane są prawidłowo tak naprawdę, tagi dwa dodałem i mam 2x tag id, jeśli próbuję zrobić var+dump($this->getError()); dostaję false że nie ma errorów, sorry za takie małe zdjęcie


dodam jeszcze jakie dane są dodane do tabeli content_types

type_alias
component.pathofcertification
table
{"special":{"dbtable":"#__component_path_of_certification","key":"id","type":"PathOfCertification","prefix":"JTable","config":"array()", "common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}

field_mappings
{"common":{"core_content_item_id":"id","core_title":"name","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}, "special":{"fulltext":"fulltext"}}

w pliku table w konstruktorze dodałem

JTableObserverTags::createObserver($this, array('typeAlias' => 'component.pathofcertification'));


w modelu w get item dodałem


if (!empty($item->id))
{
$item->tags = new JHelperTags;
$item->tags->getTagIds($item->id, 'component.pathofcertification');
}

w widoku w pliku view niezależnie od tego czy dodam


$this->form->setValue('tags', null, $tagsHelper->getTagIds( $this->item->id, 'compoennt.pathofcertification') );

to i tak nie działa

struktura tabeli pathofcertification

CREATE TABLE #__component_path_of_certification (
id serial NOT NULL PRIMARY KEY,
product_id bigint NOT NULL UNIQUE REFERENCES #__component_product (product_id) ON DELETE CASCADE ON UPDATE CASCADE,
published SMALLINT NOT NULL DEFAULT 1,
old_price INT DEFAULT NULL,
new_price INT NOT NULL DEFAULT 0
);

lyczkul
13-01-2017, 10:29
piszę już jako osobna wiadomość,
dodam jeszcze że jeśli zmienie linię
JTableObserverTags::createObserver($this, array('typeAlias' => 'component.pathofcertification'));
na którąkolwiek która jest w dokumentacji w tej sekcji to dostaję komunikat że zapisano poprawnie jednak tagi się nie zapisują

lyczkul
13-01-2017, 13:05
Doszedłem do tego że przy samym zapisie występuję błąd konkretnie plik admin.php w linij 1179 czyli


if (!$table->store())
{
$this->setError($table->getError());

return false;
}

przy czym jeśli zrobię var_dumo table->getError() nic nie dostaję.

Jola
13-01-2017, 17:56
Trzeba drążyć dalej - czyli dostać się do funkcji store() i wydobyć zapytanie do bazy.

lyczkul
16-01-2017, 08:47
doszedłem już do czegoś takiego

9009

wiem że problem najprawdopodobniej leży w kolumnie field_mappings w tabeli content_types, jeszcze do końca nie rozumiem co mam tam wpisać i jak to ma wyglądać. Wydaję mi isę że to co wpisałem jest ok ale nie działa/

Mam świadomość tego że jest to Postgresowy error, ale jednak przy tworzeniu artykułów go nie ma więc musi się dać zmusić całość do działąnia

Jola
16-01-2017, 11:12
Załącznik nie działa.

lyczkul
16-01-2017, 11:44
Wyciągnąłem zapytanie

INSERT INTO "ja5er_component_product" ("name", "lead", "text_section", "created", "updated", "homepage_id", "highlight_id", "highlight_image") VALUES(
'test666',
'',
'',
'2017-01-16 11:18:45',
'2017-01-16 11:18:45',NULL,NULL,''
);

zapomniałem że każda tabela jest w asocjacji z tabelą product
podmieniłem dane w tabeli content_types na
type_title -> Training
type_alias -> com_component.training
table -> {"special":{"dbtable":"#__component_product","key":"product_id","type":"Product","prefix":"ProductTable", "config":"array()"}}
rules -> ''
field->mappings -> {"common":{"core_content_item_id":"product_id","core_title":"name","core_state":"null","core_alias":"null","core_created_time":"created","core_modified_time":"updated","core_body":"text_section","core_hits":"null","core_publish_up":"null","core_publish_down":"null","core_access":"null", "core_params":"null","core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special":{"parent_id":"null","lft":"null","rgt":"null","level":"null","path":"null","extension":"null","note":"null"}}

router -> ''
content_history_options -> {"formFile":"administrator\/components\/com_component\/models\/forms\/training.xml", "hideFields":[], "ignoreChanges":[], "convertToInt":[], "displayLookup":[]}

Jeśli chodzi o tamten error to raczej nie ważne chodzi o to że jak źle mapuje pole id to się wyświetla inny error.

Jeśli chodzi o strukture tabel to

TRAINING :

CREATE TABLE #__component_training (
id serial NOT NULL PRIMARY KEY,
product_id bigint NOT NULL UNIQUE REFERENCES #__component_product (product_id) ON DELETE CASCADE ON UPDATE CASCADE,
form_of_training_id bigint REFERENCES #__component_form_of_training (id) DEFAULT NULL,
trainer_id bigint REFERENCES #__component_trainer (id) DEFAULT NULL,
path_of_certification_id bigint REFERENCES #__component_path_of_certification (id) DEFAULT NULL,
published SMALLINT NOT NULL DEFAULT 1,
length INT NOT NULL DEFAULT 0,
ordering INT NOT NULL DEFAULT 0
);


PRODUCT
CREATE TABLE #__component_product (
product_id serial NOT NULL PRIMARY KEY,
name text NOT NULL DEFAULT '',
lead text NOT NULL DEFAULT '',
text_section text NOT NULL DEFAULT '',
homepage_id bigint REFERENCES #__component_homepage (id) DEFAULT NULL,
highlight_id bigint REFERENCES #__component_highlight (id) DEFAULT NULL,
highlight_image text NOT NULL DEFAULT '',
created timestamp NOT NULL DEFAULT now(),
updated timestamp NOT NULL DEFAULT now()
);

Jola
16-01-2017, 13:32
Wrzuć Twoje zapytanie INSERT INTO do phpMyAdmina.

lyczkul
16-01-2017, 13:48
Wrzuciłem jest w porządku.

Wydaję mi się że w rekordach które są zapisane w bazie w tabeli content_types jest coś źle ...

Jola
16-01-2017, 18:37
Coś mi się wydaje, że analiza odbiegła od tagów - to raczej kierunek zapisywania historii.

lyczkul
17-01-2017, 08:33
tzn możesz rozwinąć ?

Ogólnie z tego co kojarzę to w tabeli content_types kolumna field_mappings jest jakoś powiązana z tagami ?

a w ktoś ma jakiś pomysł ?

lyczkul
17-01-2017, 13:45
dobra rozwiązałem, brakowało po prostu kolumny alias.