Array verschachtelt ausgeben rekursiv (Collapse) FAQ Menü - HILFE

Moin,

Ich habe mir ein kleines Plugin geschrieben, dass aus dem LiveZilla Helpdesk / Livechat die Wissensdatenbank auf einer Shopseite darstellen soll.

Problem: Ich habe ein Array und möchte dieses verschachtelt ausgeben. z.B.

-1
--1.1
--1.2
---1.2.1
-2
-2.1
-3
--3.1
---3.1.1

Das Array sieht folgendermaßen aus:

Array
(
    [0] => Array
        (
            [Title] => Ordner
            [Value] => 
            [Type] => 0
            [ParentId] => dc03677bf937499789e6ef77890031f4
            [Id] => 6119f458389994b3c9ada5f764f74fef
            [IsPublic] => 1
        )

    [1] => Array
        (
            [Title] => Frage 
            [Value] => Antwort
            [Type] => 1
            [ParentId] => 6119f458389994b3c9ada5f764f74fef
            [Id] => 3e86e3c46343670dafdd8cf1dce3ad20
            [IsPublic] => 1
        )

    [2] => Array
        (
            [Title] => Frage
            [Value] => Antwort 
            [Type] => 1
            [ParentId] => 6119f458389994b3c9ada5f764f74fef
            [Id] => 27d62d2fe6e72d9180f1df013624b3fa
            [IsPublic] => 1
        )

    [3] => Array
        (
            [Title] => Ordern
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
            [IsPublic] => 1
        )

    [4] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => dc03677bf937499789e6ef77890031f4
            [Id] => d67c6d33da71fa9e0c881328654795cb
            [IsPublic] => 1
        )

    [5] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => 3e398cfb8af24e50abd427efc9bf987f
            [Id] => dbe96d79ddc5e936dc467b264fc59112
            [IsPublic] => 1
        )

    [6] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
            [Id] => f9f2014b28099bd9498ef108b23cc3f6
            [IsPublic] => 1
        )

    [7] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => 3e398cfb8af24e50abd427efc9bf987f
            [Id] => 76103540cefd1d046c7c9ea56e225ca4
            [IsPublic] => 1
        )

    [8] => Array
        (
            [Title] => Order
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => dc03677bf937499789e6ef77890031f4
            [IsPublic] => 1
        )

    [9] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => dc03677bf937499789e6ef77890031f4
            [Id] => aa523dc6ad48aa8bc00303266d7f10bc
            [IsPublic] => 1
        )

    [10] => Array
        (
            [Title] => Frage
            [Value] => Antwort
            [Type] => 1
            [ParentId] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
            [Id] => fa6fc8cc9caabf28a7e01fe0e46e6702
            [IsPublic] => 1
        )

    [11] => Array
        (
            [Title] => Order
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => 3e398cfb8af24e50abd427efc9bf987f
            [IsPublic] => 1
        )

 

Das Ergebnis sieht so aus:

Nun sollen die Unterordner und Fragen in die Eltern Collapse Boxen … Kann mir jemand Hilfestellung geben, wie das in Smarty machbar ist ? habe bereits das hier gefunden, klappt jedoch nicht ganz. {function} | Smarty

 

Beste Grüße,

Marc

 

schau mal ich glaub in sidebar_categories.tpl , irgendwas mit sidebar war es , da wird der recursive aufruf auch benutzt. vllt. hilft das ja.

gruß,

alex

der Weg führt sicherlich erstmal dahin aus dem flachen Array einen Tree zu erzeugen siehe z.B hier https://stackoverflow.com/questions/8840319/build-a-tree-from-a-flat-array-in-php

Danach kannst Du das Rendering machen und dann von oben nach unten die jetzt geschachelten Listen ausgeben. Wobei das ganze ist sicher deutlich einfacher in einem kleinen Plugin gemacht und dann der Übergabe an eine Variable …

1 „Gefällt mir“

Ich habe bereits das Array in einer Tree Form als Variable im Template (war mein Versuch nach dem flachen Array).

 

wie würdest du dieses am besten ausgeben ?

Hier der Code für die Collapse Cox

    {$var.Title} "FRAGE / Ordner"
    




    {$var.Value} "Antwort / oder weitere Collapse Box"

 

Hier das Array als Tree 

Array
(
    [0] => Array
        (
            [Title] => Ordner
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
            [IsPublic] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
                            [Id] => f9f2014b28099bd9498ef108b23cc3f6
                            [IsPublic] => 1
                        )

                    [1] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => 23eb3ce8bbeedd7ca05d4d6eed49d6ee
                            [Id] => fa6fc8cc9caabf28a7e01fe0e46e6702
                            [IsPublic] => 1
                        )

                )

        )

    [1] => Array
        (
            [Title] => Ordner
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => dc03677bf937499789e6ef77890031f4
            [IsPublic] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [Title] => Ordner
                            [Value] => 
                            [Type] => 0
                            [ParentId] => dc03677bf937499789e6ef77890031f4
                            [Id] => 6119f458389994b3c9ada5f764f74fef
                            [IsPublic] => 1
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [Title] => Frage
                                            [Value] => Antwort
                                            [Type] => 1
                                            [ParentId] => 6119f458389994b3c9ada5f764f74fef
                                            [Id] => 3e86e3c46343670dafdd8cf1dce3ad20
                                            [IsPublic] => 1
                                        )

                                    [1] => Array
                                        (
                                            [Title] => Frage
                                            [Value] => Antwort
                                            [Type] => 1
                                            [ParentId] => 6119f458389994b3c9ada5f764f74fef
                                            [Id] => 27d62d2fe6e72d9180f1df013624b3fa
                                            [IsPublic] => 1
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => dc03677bf937499789e6ef77890031f4
                            [Id] => d67c6d33da71fa9e0c881328654795cb
                            [IsPublic] => 1
                        )

                    [2] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => dc03677bf937499789e6ef77890031f4
                            [Id] => aa523dc6ad48aa8bc00303266d7f10bc
                            [IsPublic] => 1
                        )

                )

        )

    [2] => Array
        (
            [Title] => Ordner
            [Value] => 
            [Type] => 0
            [ParentId] => 1
            [Id] => 3e398cfb8af24e50abd427efc9bf987f
            [IsPublic] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => 3e398cfb8af24e50abd427efc9bf987f
                            [Id] => dbe96d79ddc5e936dc467b264fc59112
                            [IsPublic] => 1
                        )

                    [1] => Array
                        (
                            [Title] => Frage
                            [Value] => Antwort
                            [Type] => 1
                            [ParentId] => 3e398cfb8af24e50abd427efc9bf987f
                            [Id] => 76103540cefd1d046c7c9ea56e225ca4
                            [IsPublic] => 1
                        )

                )

        )

)

 

Keiner ?

Eine Baumstruktur rekursiv iterieren? Das ist das gleiche wie die Kategorien in der linken Sidebar. Hat ja auch @Rednaxela‍ bereits geschrieben. Das sollte dir helfen: https://github.com/shopware/shopware/blob/5.3/themes/Frontend/Bare/frontend/index/sidebar-categories.tpl

Viele Grüße

$ele1['id'] = 1;
$ele1['label'] = 'test 1';

$ele2['id'] = 2;
$ele2['label'] = 'test 2';

$ele3['id'] = 3;
$ele3['label'] = 'test 3';
$ele3['children'][] = $ele2;

$ele4['id'] = 4;
$ele4['label'] = 'test 4';
$ele4['children'][] = $ele3;

$rows[] = $ele1;
$rows[] = $ele4;

$args->getSubject()->View()->assign('aFAQ', $rows);

das war dann zunächst mal das “Assignment” im Controller oder Handler …

hier kommt das “Rendering” z.B. in den Details:

{block name='frontend_detail_description_text'}
    ...
    {function name=printFAQ}
	UL
	    {foreach $items as $item}
	    LI
	        {$item['label']}

	        {if $item['children']}
	            {call name=printFAQ items=$item['children']}
	        {/if}
	    /LI
	    {/foreach}
	UL
	{/function}
    {call name=printFAQ items=$aFAQ}
{/block}

Bei Fragen einfach fragen  Smile. Leider zerlegt der Renderer hier die HTML Tags einfach die bei UL und LI hinzufügen. Wichtig ist die Definition der Funktion innerhalb des Blocks, da gibt es ein namespacing bei Smarty. Das “{call name=printFAQ items=$aFAQ}” ganz unten ist dann faktisch der Aufruf der Funktion (die sich dann intern selbst rekursiv aufruft).

Gruss

Carsten

Perfekt Danke!!! Klappt nun alles. Wenn jemand Interesse am Plugin hat hier:

https://forum.shopware.com/discussion/51485/gratis-plugins-sammlung-github/p1