pobieranie parametru &Itemid

Moderator: Radek Suski

Locked
arti
Joomla! Apprentice
Joomla! Apprentice
Posts: 37
Joined: Fri Sep 23, 2005 10:45 pm

pobieranie parametru &Itemid

Post by arti » Mon Oct 03, 2005 5:52 pm

Mam taką strukturę menu

Sekcja1
- Kategoria1
- Kategoria2
- Kategoria3
Sekcja2
- Kategoria1
- Kategoria2

Wszystko to to blogi, czyli blogsekcja i blogkategoria. Gdy wyświetam np. Sekcja1 to otrzymuję wszystkie newsy z tej sekcji (i w linku "czytaj dalej" dopina się &Itemid sekcji1), gdy klikam na Kategoria1 to zawężam się do newsów tylko z tej kategorii (i w linku "czytaj dalej" dopina się &Itemid kategorii1).

Teraz pytanie moje jest takie: czy jest możliwość pobrania parametru &Itemid macierzystej kategorii newsa? - prościej mówiąc chiałbym aby link "czytaj dalej" posiadał &Itemid kategorii do której news jest dopisany a nie &Itemid bieżącej strony.

User avatar
ORLONnet
Joomla! Explorer
Joomla! Explorer
Posts: 307
Joined: Fri Aug 19, 2005 5:15 am
Location: Poland
Contact:

Re: pobieranie parametru &Itemid

Post by ORLONnet » Mon Oct 03, 2005 9:16 pm

a odsyłacz taki wstawiając w menu index.php?option=com_content&task=blogsection&id=0&Itemid=3 co otrzymasz?
A jak zmienisz fragment na "Itemid=5"?
Pozdrawiam
Norbert
ORLON.net

arti
Joomla! Apprentice
Joomla! Apprentice
Posts: 37
Joined: Fri Sep 23, 2005 10:45 pm

Re: pobieranie parametru &Itemid

Post by arti » Tue Oct 04, 2005 5:57 am

Może opiszę to dokładnie, mam jakies menu i cztery szaty graficzne wyświetlające się w zależności od sekcji/kategorii jaką oglądamy:

Aktualności (template1) - (&Itemid=11)
- FreeBSD (template2) - (&Itemid=12)
- OpenBSD (template3) - (&Itemid=13)
- NetBSD (template4) - (&Itemid=14)


I teraz tak, gdy klikam na Sekcja1 to mam wszystkie newsy z tej sekcji a pod linkiem "czytaj dalej" kryje się &Itemid=11 pod każdym z newsów, a ja chciałbym aby w tym linku był zawarty &Itemid kategorii, z której pochodzi news czyli np. z Kategori1 i powinien mieć &Itemid=12. Dlaczego tak? Bo w chwili obecnej gdy klikam na "czytaj dalaej" na stronie Sekcja1 to nie przełączy mi się szata graficzna na taką jaka powinna być.

Dla zobrazowania sytuacji podaje przykład żywy http://www.bsd4u.org/test
- klikamy na aktualności tam sa dwa newsy "dfndgngndgn" i "test news", klikamy na czytaj dalej w "dfndgngndgn" (http://www.bsd4u.org/test/index.php?opt ... &Itemid=11) i nie zmienia się nam szata (a powinna bo news ten należy do kategorii Aktualności->FreeBSD) poniważ dostaje &Itemid=11 czyli sekcji (strony bieżącej a chodzi o to że sekcja ma inną tempatke aniżeli kategorie podrzędne). Wiem iż może jest to prawidłowe zachowanie, ale ja chciałbym zmodyfikować to na swoje potzreby.

Mam nadzieję, że jest już troszkę jaśniej

arti
Joomla! Apprentice
Joomla! Apprentice
Posts: 37
Joined: Fri Sep 23, 2005 10:45 pm

Re: pobieranie parametru &Itemid

Post by arti » Sat Oct 29, 2005 2:09 pm

Widzę, że nikt nie wie za bardzo jak mi pomóc ;/

1. Wystartowałem już ze storną i poprosze Was jeszcze raz o pomoc. Mianowicie na stornie http://www.bsd4u.org mamy sekcję Security Advisory  (6 link od góry) lub Aktualnosci. Gdy na nią klikniemy nadal pozostajemy przy szacie zielonej. Gdy klikniemy w pod menu np. FreeBSD pzrechodzimy do szaty czerwonej (i do tej pory jest OK). Teraz gdy chcemy wyśiwetlić jakiś artykuł powracamy do szaty zielonej (czyli szaty z sekcji a nie z kategorii) i dal mnie jest to problemem, bo chcę aby artykuły zachowywały kolor szaty kategorii z której pochodzą a nie z nadrzędnej sekcji. Czy jest możliwe takie ustawienie??

2. Druga sprawa to jak mam na stronie moduł "Ostatnie komentarze" to zawsze klikając na link pozostajemy na zielonej szacie a nie na szacie kategorii, z której pochodzi artykuł. Taki sam efekt jest gdy klikamy na link "Napisz komentarz". Co z tym zrobić aby osiągnąć efekt opisywany powyżej.

Jak w tych likach przekazywac Itemid kategorii z której pochodzi artykuł???

Pozdrawiam

Edit:
Rozwiązałem problem w module "Ostatnie komentarze" oraz w linku "Napisz komentarz" i "Czytaj dalej"
Dla modułu "Ostatnie komentarze" w pliku modules/mod_latestAkocomments.php zamieniamy kod:

Code: Select all

      $comm .= "<span class=\"latestCommentsTitle\">";
      if ($linked) {
        $link = sefRelToAbs('index.php?option=com_content&task=view&id='. $akrow->contentid);
        $comm .= "<a class=\"latestCommentsTitle\" href=\"$link\">";
      }

na:

Code: Select all

      $comm .= "<span class=\"latestCommentsTitle\">";
      if ($linked) {

      // arti
      $queryItemid = "SELECT m.id FROM #__menu m, #__content c WHERE m.componentid = c.catid AND m.type='content_blog_category' AND c.id = $akrow->contentid";
      $database->setQuery( $queryItemid );
      $_Itemid = $database->loadResult();
      // arti

        $link = sefRelToAbs('index.php?option=com_content&task=view&id='. $akrow->contentid.'&Itemid='.$_Itemid);
        $comm .= "<a class=\"latestCommentsTitle\" href=\"$link\">";
      }
Dla linku "Napisz komentarz" w pliku mambot/content/akocommentbot.php zamieniamy kod:

Code: Select all

# If we are not on the content page
    } else {
      $replacementlink = ($ac_openingmode) ? "<a class=\"readon\" href=\"javascript:void window.open('".sefRelToAbs("index2.php?option=com_content&task=view&id=$row->id&pop=1&page=0")."', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\">" : "<a class=\"readon\" href='".sefRelToAbs("index.php?option=com_content&task=view&id=$row->id)."'>";
na

Code: Select all

# If we are not on the content page
    } else {

      // arti
      $queryItemid = "SELECT m.id FROM #__menu m, #__content c WHERE m.componentid = c.catid AND m.type='content_blog_category' AND c.id=$row->id";
      $database->setQuery( $queryItemid );
      $_Itemid = $database->loadResult();
      // arti

      $replacementlink = ($ac_openingmode) ? "<a class=\"readon\" href=\"javascript:void window.open('".sefRelToAbs("index2.php?option=com_content&task=view&id=$row->id&pop=1&page=0")."', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\">" : "<a class=\"readon\" href='".sefRelToAbs("index.php?option=com_content&task=view&id=$row->id&Itemid=".$_Itemid)."'>";
Dla linku "Czytaj dalej" w pliku components/com_content/content.html.php dopisujemy w funkcji show zmienną $databases jako globalną, czyli kod powinien wyglądać tak:

Code: Select all

        function show( &$row, &$params, &$access, $page=0, $option, $ItemidCount=NULL ) {
                global $mainframe, $my, $hide_js;
                global $mosConfig_sitename, $Itemid, $mosConfig_live_site, $task;
                global $_MAMBOTS;
                //arti
                global $database;

oraz w tej samej funkcji zaminiemay kod:

Code: Select all

                        // checks if the item is a public or registered/special item
                        if ( $row->access <= $gid ) {
                                if ($task != "view") {
                                   $_Itemid = $mainframe->getItemid( $row->id, 0, 0, $ItemidCount['bs'], $ItemidCount['bc'], $ItemidCount['gbs'] );
                                }
                                $link_on = sefRelToAbs("index.php?option=com_content&task=view&id=".$row->id."&Itemid=".$_Itemid);
na

Code: Select all

                        // checks if the item is a public or registered/special item
                        if ( $row->access <= $gid ) {
                                if ($task != "view") {
                                   $_Itemid = $mainframe->getItemid( $row->id, 0, 0, $ItemidCount['bs'], $ItemidCount['bc'], $ItemidCount['gbs'] );
                                }

                                // arti
                                $queryItemid = "SELECT m.id FROM #__menu m, #__content c WHERE m.componentid = c.catid AND m.type='content_blog_category' AND c.id=$row->id";
                                $database->setQuery( $queryItemid );
                                $_Itemid = $database->loadResult();
                                // arti

                                $link_on = sefRelToAbs("index.php?option=com_content&task=view&id=".$row->id."&Itemid=".$_Itemid);

To jest zapytanie które wyciąga Itemid kategorii, do której należy artykuł (o ile należy, a w moim przypadku zawsze jest sekcja, później kategoria i dopiero artykuł/nws)
SELECT m.id FROM #__menu m, #__content c WHERE m.componentid = c.catid AND m.type='content_blog_category' AND c.id=ID_NASZEGO_NEWSA (podstawiamy tu parametr, które takie ID newsa nam przekazuje).

Teraz chciałbym się tylko dowiedzieć, gdzie mogę zmodyfikować kod odpowiedzialny za sytuację z punku 1.? Czyli, w które miejsce w kodzie jest odpowiedzialne za wyśiwetlanie listy artykułów dla sekcji (tak jak tu http://www.bsd4u.org/content/blogsection/7/49/)

Edit:
Rozbujałem się dizsiaj i to też zrobiłem ;-)
W pliku components/com_content/content.html.php dopisujemy w funkcji showLinks zmienną $databases jako globalną, czyli kod powinien wyglądać tak:

Code: Select all

        function showLinks( &$rows, $links, $total, $i=0, $show=1, $ItemidCount ) {
                global $mainframe;
                // arti
                global $database;

Następnie w tej samej funkcji zmieniamy kod z:

Code: Select all

                        // needed to reduce queries used by getItemid
                        $_Itemid = $mainframe->getItemid( $rows[$i]->id, 0, 0, $ItemidCount['bs'], $ItemidCount['bc'], $ItemidCount['gbs'] );

                        $link = sefRelToAbs( 'index.php?option=com_content&task=view&id='. $rows[$i]->id .'&Itemid='.$_Itemid )
na

Code: Select all

                        // needed to reduce queries used by getItemid
                        //$_Itemid = $mainframe->getItemid( $rows[$i]->id, 0, 0, $ItemidCount['bs'], $ItemidCount['bc'], $ItemidCount['gbs'] );

                        // arti
                        $contentid = $rows[$i]->id;
                        $queryItemid = "SELECT m.id FROM #__menu m, #__content c WHERE m.componentid = c.catid AND m.type='content_blog_category' AND c.id=$contentid";
                        $database->setQuery( $queryItemid );
                        $_Itemid = $database->loadResult();
                        //echo $rows[$i]->id;
                        // arti

                        $link = sefRelToAbs( 'index.php?option=com_content&task=view&id='. $rows[$i]->id .'&Itemid='.$_Itemid )
P.S.
Gdyby komuś się to przydało i chciałby ktoś to przetestować u siebie to będe wdzięczny za wszelkie info o błędnym działaniu lub o jakichkolwiek problemamch związanych z tą modyfikacją :)
Last edited by arti on Sun Oct 30, 2005 2:39 pm, edited 1 time in total.


Locked

Return to “Modyfikacje i własne rozwiązania”