$sAdvancedMenu array abfragen

 

Unser Warenwirtschaftsystem kann noch keine Kategoriebilder übertragen und die Programmierer waren so schlau, das diese bei jeder Aktualisierung die eingetragenen Bilder wieder löschen.
Darum habe ich mir in den Kategorien ein Freitextfeld erzeugt und wollte jetzt auf dieses zugreifen aber da hat sich ein neues Problem eröffnet.

Die URL zum Bild ist unter $sAdvancedMenu.0.sub.?.attribute.kategoriebild zu finden aber meine Abfrage funktioniert nur beim ersten Menüpunkt.

Kann man eventuell die {$category.id} mit der $sAdvancedMenu[0].sub.[?].attribute.categoryID abgleichen und dann den Inhalt von $sAdvancedMenu[0].sub.[?].attribute.kategoriebild ausgeben lassen, ohne das ich jetzt den Array in seine einzelteile zerlege und das bestenfalls ohne erneute Datenbankabfrage bzw, extra PHP Script, da es hoffentlich nur eine vorübergehende Lösung ist.

{block name="frontend_plugins_advanced_menu_list_item"}

	{$category.name} {$category.id}


	{$count++}	
	{$counter=$count-1}
	{if $sAdvancedMenu[0].sub.$counter.attribute.kategoriebild}
		
	{/if}

	{if $category.sub}
		{call name=categories_top categories=$category.sub level=$level+1}
	{/if}
	{debug}
{/block}

 $sAdvancedMenu

​
Smarty_Variable Object (3)
->value = Array (7)
  0 => Array (39)
    id => 34
    parentId => 3
    name => "Serien"
    position => 0
    metaTitle => null
    metaKeywords => null
    metaDescription => null
    cmsHeadline => null
    cmsText => null
    active => true
    template => ""
    productBoxLayout => "list"
    blog => false
    path => "|3|"
    external => null
    externalTarget => ""
    hideFilter => false
    hideTop => false
    changed => null
    added => null
    attribute => Array (0)
    attributes => Array (0)
    media => null
    mediaId => null
    link => "shopware.php?sViewport=cat&sCategory=34"
    streamId => null
    productStream => null
    childrenCount => 20
    description => "Serien"
    cmsheadline => null
    cmstext => null
    sSelf => "shopware.php?sViewport=cat&sCategory=34"
    canonicalParams => Array (2)
      sViewport => "cat"
      sCategory => 34
    hide_sortings => false
    rssFeed => "shopware.php?sViewport=cat&sCategory=..."
    atomFeed => "shopware.php?sViewport=cat&sCategory=..."
    flag => false
    sub => Array (20)
      0 => Array (39)
        id => 35
        parentId => 34
        name => "Test 1"
        position => 0
        metaTitle => ""
        metaKeywords => null
        metaDescription => ""
        cmsHeadline => ""
        cmsText => ""
        active => true
        template => ""
        productBoxLayout => "list"
        blog => false
        path => "|3|34|"
        external => ""
        externalTarget => ""
        hideFilter => false
        hideTop => false
        changed => null
        added => null
        attribute => Array (9)
          id => "1"
          categoryID => "35"
          attribute1 => null
          attribute2 => null
          attribute3 => null
          attribute4 => null
          attribute5 => null
          attribute6 => null
          kategoriebild => "https://domain.tld/media/imag..."
        attributes => Array (1)
          core => Shopware\Bundle\StoreFrontBundle\Struct\Attribute Object (0)
        media => null
        mediaId => null
        link => "shopware.php?sViewport=cat&sCategory=35"
        streamId => null
        productStream => null
        childrenCount => 0
        description => ""
        cmsheadline => "Test 1"
        cmstext => ""
        sSelf => "shopware.php?sViewport=cat&sCategory=35"
        canonicalParams => Array (2)
          sViewport => "cat"
          sCategory => 35
        hide_sortings => false
        rssFeed => "shopware.php?sViewport=cat&sCategory=..."
        atomFeed => "shopware.php?sViewport=cat&sCategory=..."
        flag => false
        sub => Array (0)
        activeCategories => 0
      1 => Array (39)
        id => 36
        parentId => 34
        name => "Test 2"
        position => 1
        metaTitle => ""
        metaKeywords => null
        metaDescription => ""
        cmsHeadline => ""
        cmsText => ""
        active => true
        template => null
        productBoxLayout => "list"
        blog => false
        path => "|3|34|"
        external => ""
        externalTarget => ""
        hideFilter => false
        hideTop => false
        changed => null
        added => null
        attribute => Array (9)
          id => "2"
          categoryID => "36"
          attribute1 => null
          attribute2 => null
          attribute3 => null
          attribute4 => null
          attribute5 => null
          attribute6 => null
          kategoriebild => "https://domain.tld/media/imag..."
        attributes => Array (1)
          core => Shopware\Bundle\StoreFrontBundle\Struct\Attribute Object (0)
        media => null
        mediaId => null
        link => "shopware.php?sViewport=cat&sCategory=36"
        streamId => null
        productStream => null
        childrenCount => 0
        description => "Type 301 HM"
        cmsheadline => "CHROMA type 301 HM – Design by F.A. P..."
        cmstext => "Mit Hammerschlag CHROMA t..."
        sSelf => "shopware.php?sViewport=cat&sCategory=36"
        canonicalParams => Array (2)
          sViewport => "cat"
          sCategory => 36
        hide_sortings => false
        rssFeed => "shopware.php?sViewport=cat&sCategory=..."
        atomFeed => "shopware.php?sViewport=cat&sCategory=..."
        flag => false
        sub => Array (0)
        activeCategories => 0
​

Irgendwie habe ich momentan ein Brett vorm Kopf, vielleicht kann mir da wer behilflich sein.

Ich verstehe den Ansatz nicht so ganz, Freitextfeld, Menu Abfragen, was und wofür soll das alles sein ?

Bei einem WaWi Abgleich wird lediglich der Link dem API Request mitgegeben. Wenn, würde ich vorher Abfragen ob die Kategoriestruktur (Kategorie/MediaID) vom jeweiligen Artikel schon exestiert und ensprechend den Kategorie Request planen um die Kategorie/Bild zu erstellen/updaten, oder auch nicht…

Dafür braucht man aber nicht die Menustruktur abfragen, noch ein Feld erstellen, oder habe ich da was übersehen !?

{
    "name": "My Category",
    "parent": 3,
    "position": 1,
    "metaTitle": "My Category Meta Title",
    "metaKeywords": "my,category,meta,keywords",
    "metaDescription": "My Category Meta Description",
    "cmsHeadline": "The Category",
    "cmsText": "Discover the advantages of an api created category",
    "active": true,
    "blog": false,
    "external": "",
    "externalTarget": "",
    "hideFilter": false,
    "facetIds": "|2|3|",
    "hideSortings": false,
    "sortingIds": "|1|2|",
    "hideTop": true,
    "productBoxLayout": "minimal",
    "changed": "2018-01-01 18:00:00",
    "media": {
        "link": "https://my-image-url/path/to/image.jpg"
    }
}

 

Ich versuche es nochmal zu verdeutlichen.

Der Hersteller von Büroplus nutzt die Cateno Schnittstelle, diese löscht warum auch immer die Kategoriebilder, das ist leider der momentane Zustand von der Software.
Darum kann ich so viele Kategoriebilder einpflegen wie ich möchte, diese werden beim Datenabgleich wieder gelöscht. 

Ich möchte im Menü keinen Text sondern Bilder der Produktserien als Link hinzufügen und der Text wird dann entsprechend nur noch als Titel vom Bild angezeigt.

So wie ich das sehe, muss ich wohl eine Schleife durchlaufen und den Array  $sAdvancedMenu[0].sub als neuen Array einlesen und danach diesen Array erneut durch eine Schlaife laufen lassen um die ID und den Link zum Kategoriebild herausfiltern zu können.

Danach muss ich halt nur noch eine Funktion bauen, die aus dem Array die $sAdvancedMenu[0].sub.?.attribute.id mit der $category.id abgleicht und die Bildurl aus dem Freitextfeld ausliest und im Template entsprechend ausgibt.

Habe mir eine Lösung zusammengebasteln.

Mit der Funktion such ich nach der entsprechenden Kategorie Id, prüfe ob diese einen Eintrag im erzeugten Freitextfeld hat und geben dann den Quelltext für das Bild aus. Mit der zusätzlichen CSS Class positioniere ich mir das Bild. Die zweite Schleife ist dann für den zweiten Menüpunkt, der auch mit Bildern aufgehübscht wird.

{block name="frontend_plugins_advanced_menu_list_item"}
	{function name=KategorieBild}
		{foreach $sAdvancedMenu[0].sub as $p}
			{if $p.id==$category.id} 
				{if $p.attribute.kategoriebild}
					
				{else}
					 
				{/if}
			{/if}
		{/foreach}
		{foreach $sAdvancedMenu[1].sub as $p}
			{if $p.id==$category.id} 
				{if $p.attribute.kategoriebild}
					
				{else}
					 
				{/if}
			{/if}
		{/foreach}
	{/function}
	
	{KategorieBild}{$category.name}

	{if $category.sub}
		{call name=categories_top categories=$category.sub level=$level+1}
	{/if}
{/block}