Zobacz pełną wersję : Dodatkowe artykuły sciągane z XML.
Chciałbym pobierac do artykułów w Joomli, artykuły z Bloga, za pomocą XML.
Probowałem juz to robic, przerabiajac plik components\com_content\models\category.php oraz funkcję getItems() gdzie na koncu jest zwracana tablica artykułów.
Pobieranie jest za pomoca dodatkowej funkcji, ktora zwraca tablice z artykułami z bloga. Problem jest kiedy lacze te dwie tablice i probuje zwrócic w funkcji getItems() tablice koncowa..
Stąd moje pytanie.
Czy może nie byłoby łatwiej to zrobic poprzez plugin, jesli tak to jak się za to zabrac.. Bo moze zamiast ingerowac w instniejacy kod moglbym jakos dopisac artykuły do tablicy toz przed wyswietleniem :>
Aha.. jeszcze jedna wazna sprawa, chce aby artykuły te były w jednej tablicy, zeby mozna bylo je posortowac (art z Joomli i z bloga) nie interesuje mnie rozwiązanie osadzenia np powyzej artykułow z Bloga.
Proszę o pomoc weteranow ktorzy na Joomla zęby pozjadali! :P
deviapps
13-08-2012, 11:15
Moim zdaniem najlepiej skopiować to, co najważniejsze z com_content do nowego komponentu i wtedy dodać nową tabelę z arykułami z bloga (odnośnikami) oraz zmodyfikować zapytanie, żeby robiło np UNION z nową tabelą.
Nowa tabela najlepiej jakby była zasilana (synchronizowana) cyklicznie, żeby odciążyć w request ściąganie xml z zewnętrznego serwisu.
Wtedy na bazie możesz sobie sortować i filtrować wg potrzeb.
Moim zdaniem najlepiej skopiować to, co najważniejsze z com_content do nowego komponentu i wtedy dodać nową tabelę z arykułami z bloga (odnośnikami) oraz zmodyfikować zapytanie, żeby robiło np UNION z nową tabelą.
Nowa tabela najlepiej jakby była zasilana (synchronizowana) cyklicznie, żeby odciążyć w request ściąganie xml z zewnętrznego serwisu.
Wtedy na bazie możesz sobie sortować i filtrować wg potrzeb.
Więc tak, dodaje i wyswietla dane z xml.. aleeee, jest problem z paginacja, poniewaz w nowej joomli paginacja jest tak rozwiazana ze pobiera wiersze przy kazdym przeladowaniu, z pliku modellist z bibliotek, wiec nie bardzo sie da operowac na tym..
Przykladowo, pierwsza strona ladnie dodaje i sortuje wg daty, ale wejde strona 2..3..4 itd to zawsze dodaje na gore te z xml i sortuje.. Czyli do zapytania zawsze jest dodawany dodatkowo rezultat z xml.
deviapps
13-08-2012, 13:13
No to przerób jeszcze getListQuery() tak, aby START i LIMIT było po połączeniu tabel, czyli w wynikowym:
Select * FROM (Select * from #__content WHERE $where UNION Select * from #__content_xml WHERE $where) ORDER BY $order_col START $start LIMIT $limit;
zapytanie może nie jest optymalne, ale da efekt i na pewno coś wymyślisz przyśpieszającego z czasem. Może za pomocą full outer joina coś (w oracle używa się przy tym NVL - nie wiem jak w mysql).
Pozostaje jeszcze możliwość kopiowania treści z #__content do #__content_xml - będzie szybciej, ale duplikuje zawartość bazy
lub umieszczenia w #__content odnośników do bloga i specjalne obsłużenie tych specjalnych przy wyświetlaniu linków - trzeba uważać, żeby te treści nie pokazały się w oryginalnym komponencie lub w modułach w innych częściach witryny.
No więc tak, problem rozwiązany.
Nie trzeba było ingerować w kod joomli, wystarczyły zmiany w componencie content :)
Dla zainteresowanych plik models/category.php
1. Ustalenie wartosci na sztywno:
$model->setState('list.start', 0);
$model->setState('list.limit', 999999);
2. Pobranie tablicy artykułów Bloga z XML do tablicy.
3. Policzenie wartości artykułów z Joomli oraz z tablicy Bloga. (
count())
4. Następnie ustalenie tej wartosci:
$model->setState('list.limit',$count);
5. Przypisanie paginacji na sztywno:
$this->_pagination = new JPagination($count,$this->getState('list.start'),5);
gdzie: $count jest wartoscia wsztskich art., getState.. jest wartoscia aktualnej strony paginacji, a 5 jest iloscia artykułów.
6. Polaczenie
array_merge'm tablicy Joomli i Bloga, przesortowanie jej wg daty dzieki
usort()
7. No i faza koncowa to zwrocenie potrzebnych nam wartosci w nowej tablicy. Przykladowo jestesmy na stronie 5 paginacji, mamy za soba 25 artykulow bo tyle wyswietla nam poszczegolna paginacja, wiec pobieramy wszystkie wartosci 25> :)) moze i niezbyt eleganckie ale działa prawidłowo.
$i=0;
$Final = array();
$j=0;
for ($i=$this->getState('list.start'); $i<$count; $i++) {
$Final[$j] = $FullList[$i];
$j++;
}
No i oczywiscie zwrocenie tablicy $Final.
Poza tym trzeba pozniej sie pobawic w stylach zeby dobrze wyswietlalo, miec funkcje pobierajaca wartosci z xml i wrzucajaca do tablicy.
Najwazniejsza rzecza jest przypisanie [params] dla kazdego artykulu, poniewaz Joomla dopina je automatycznie, wiec w artykul z XML tez musimy!
Mam nadzieję ze poradnik się komus przyda, gdyby ktos byl zainteresowany bezposrednio plikiem prosze o info.
Fajnie, że działa ale lepszym rozwiązaniem byłoby napisanie pluginu lub komponentu. Teraz musisz pamiętać aby sprawdzić czy kolejne aktualizacje nie nadpiszą Ci tych plików.
Fajnie, że działa ale lepszym rozwiązaniem byłoby napisanie pluginu lub komponentu. Teraz musisz pamiętać aby sprawdzić czy kolejne aktualizacje nie nadpiszą Ci tych plików.
Nie nadpisza :) bo com_component mozna skopiowac, zrobic z tego nowa instalke np pod nazwa com_component_other i wtedy przypisac to w menu pod com_component_other :)) to jest bardzo mala zmiana w pliku, wiec wszystko powinno dzialac nawet przy nowej wersji, ew moze sie zmienic nazwa getow/setow lub klasy paginacji :))
Takze mozna to potraktowac jako nowy komponent :) jesli chodzi o plugin to chyba by to nie zdalo egzaminu, zdecydowanie musiałby to byc komponent.
vBulletin® v4.2.5, Prawa przedruku © 2024 vBulletin Solutions, Inc. Wszystkie prawa zastrzeżone.
Tłumaczenie: Polskie Centrum Joomla!