Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: smarty - nieznanej glebokosci drzewo
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
AcidBurnt
witam

jak wyswietlic w smarach nieznanej dlugosci drzewo?

w tej chwili dla takiej tablicy drzewa:

Kod
Array
(
    [0] => Array
        (
            [content_id] => 1
            [sub_con_id] => 0
            [content_name] => news
            [content_name_display] => Nowości
            [content_type] => 0
            [content_count] => 0
            [subcontent] => Array
                (
                    [0] => Array
                        (
                            [content_id] => 2
                            [sub_con_id] => 1
                            [content_name] => show
                            [content_name_display] => Pokaż nowości
                            [content_type] => 0
                            [content_count] => 0
                            [subsubcontent] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [content_id] => 3
                            [sub_con_id] => 1
                            [content_name] => add
                            [content_name_display] => dodaj nowość
                            [content_type] => 0
                            [content_count] => 0
                            [subsubcontent] => Array
                                (
                                    [0] => Array
                                        (
                                            [content_id] => 4
                                            [sub_con_id] => 3
                                            [content_name] => test      
                                            [content_name_display] => test                                                        
                                            [content_type] => 0
                                            [content_count] => 0
                                        )

                                )

                        )

                )

        )

)


w smartach leci to tak:

Kod
     {section name=a loop=$main_links}
    <li><a href="/home/{$main_links[a].content_name}">{$main_links[a].content_name_display}</a></li>
    {if !empty($main_links[a].subcontent)}
        <ul>
      {section name=b loop=$main_links[a].subcontent}
          <li><a href="/home/{$main_links[a].content_name}/{$main_links[a].subcontent[b].content_name}">{$main_links[a].subcontent[b].content_name_display}</a></li>
        {if !empty($main_links[a].subcontent[b].subsubcontent)}
            <ul>
          {section name=c loop=$main_links[a].subcontent[b].subsubcontent}
              <li><a href="/home/{$main_links[a].content_name}/{$main_links[a].subcontent[b].content_name}/{$main_links[a].subcontent[b].subsubcontent[c].content_name}">{$main_links[a].subcontent[b].subsubcontent[c].content_name_display}</a></li>
          {/section}
            </ul>
        {/if}
      {/section}
        </ul>
    {/if}
     {/section}


no tylko teraz jak wyswitlic podobnego typu menu, jesli nie znam jego glebokosci?

ma ktoś jakiś pomysł
mike
Za pomocą mechanizmów Smarty'ego: nie da się.
DeyV
Smarty pozwala na definiowanie własnych metod i pluginów.
W takim przypadku najlepszym rozwiażaniem będzie napisanie metody, która będzie wywływana rekurencyjnie.

Na forum smarty jest przykład, jak można to zrobić przy pomocy proponowanej, nowej składni:
Kod
{fun name='nazwa funckji'}
{defun name='nazwa funckji'}

// body

{/defun}
mike
Jakoś nigdy nie lubiłem tej kobylastości Smarty'ego i czasem coś lepiej zrobić w php.

Ja drzewa wyświatlam tak:
Kod
{php}
    $arrTree = $this->_tpl_vars[ 'FULL_TREE' ];

    if( is_array( $arrTree ) )
    {
        drawNode( $arrTree );
    }
    else
    {
        echo 'Brak zawartości.';
    }
    
    function drawNode( $arrTree )
    {
        echo '<ul>';
        foreach( $arrTree as $intKey => $arrValue )
        {
            echo '<li><a href="#" onclick="editSection( \'form\', ' . $arrValue[ 'id' ] . ' );" title="' . $arrValue[ 'name' ] . '">' . $arrValue[ 'name' ] . '</a>';
            if( is_array( $arrValue[ 'childs' ] ) )
            {
                drawNode( $arrValue[ 'childs' ] );
            }
            echo '</li>';
            
            if( is_array( $arrValue[ 'articles' ] ) )
            {
                echo '<ul>';
                foreach( $arrValue[ 'articles' ] as $intArticleKey => $arrArticle )
                {
                    echo '<li class="file"><a href="#" title="' . $arrArticle[ 'title' ] . '">' . $arrArticle[ 'title' ] . '</a></li>';
                }
                echo '</ul>';
            }
        }
        echo '</ul>';
    }
    
  {/php}


A mam takie drzewo:

Kod
Array
(
    [0] => Array
        (
            [id] => 1
            [parentId] => 0
            [languageId] => 1
            [menuId] => 1
            [active] => 1
            [open] => 0
            [position] => 1
            [name] => ArtykuĹ�y
            [articles] =>
            [childs] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [parentId] => 1
                            [languageId] => 1
                            [menuId] => 1
                            [active] => 1
                            [open] => 0
                            [position] => 1
                            [name] => Kucharskie
                            [articles] =>
                            [childs] =>
                        )

                    [1] => Array
                        (
                            [id] => 3
                            [parentId] => 1
                            [languageId] => 1
                            [menuId] => 1
                            [active] => 1
                            [open] => 0
                            [position] => 2
                            [name] => Techniczne
                            [articles] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [parentId] => 3
                                            [languageId] => 1
                                            [active] => 1
                                            [open] => 0
                                            [date] => 2005-12-22 23:51:04
                                            [title] => Ĺ�rubokrÄ�t i kredki, czyli nic ...
                                            [lead] =>
                                            [content] =>
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [parentId] => 3
                                            [languageId] => 1
                                            [active] => 1
                                            [open] => 0
                                            [date] => 2005-12-22 23:50:07
                                            [title] => Wytrych i inne sprzÄ�ty.
                                            [lead] =>
                                            [content] =>
                                        )

                                )

                            [childs] =>

                        )

                    [2] => Array
                        (
                            [id] => 9
                            [parentId] => 1
                            [languageId] => 1
                            [menuId] => 1
                            [active] => 1
                            [open] => 0
                            [position] => 3
                            [name] => Test vol. 2
                            [articles] =>
                            [childs] =>
                        )

                )

        )

    [1] => Array
        (
            [id] => 7
            [parentId] => 0
            [languageId] => 1
            [menuId] => 1
            [active] => 1
            [open] => 0
            [position] => 2
            [name] => Okulistyka dla pacjenta
            [articles] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [parentId] => 7
                            [languageId] => 1
                            [active] => 1
                            [open] => 0
                            [date] => 2005-12-22 23:52:47
                            [title] => DĹ�ubanie w oku bez bĂłlu. Porady dla poczÄ�tkujÄ�cych.
                            [lead] =>
                            [content] =>
                        )

                    [1] => Array
                        (
                            [id] => 6
                            [parentId] => 7
                            [languageId] => 1
                            [active] => 1
                            [open] => 0
                            [date] => 2005-12-22 23:52:47
                            [title] => Kurz w oku. PĹ�ukaÄ� czy ... wyjÄ�Ä� oko?
                            [lead] =>
                            [content] =>
                        )

                )

            [childs] =>
        )

)

...które przesyłam do Smarty'ego
  1. <?php
  2.  
  3. $objSmarty->assign( 'FULL_TREE', $arrTree );
  4.  
  5. ?>
anopak
Nie lepiej tego zrobić poprostu przez rekurencje? W Smarty są defakto 2 metody, albo napisać własną funkcję wywoływaną w tpl, albo pętlą jechać po tablicy i includować ten sam plik jeżeli mamy pod drzewo....
stal-sw
Witam.
Ale po co robic kombinacje z wysietlaniem rekurencji w SMARTy ?!?!
Wystarczy w php stworzyc odpowiednia tablice i wysietlic ja w Smary za pomoca foreach.

No tylko ja walsnie mam prbolem z napisaniem kodu ktrory ze struktury bazy:
CID, PARENT_ID, TITLE
stworzy mi taka odpowiednia tablice.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.