Witam,
Ostatnio chciałem sobie dodać do podstrony product.tpl wartości obrazków wy wygenerować sobie lepiej miniaturki, wczytać wszystkie zdjęcie przyciskiem oraz przypisać miniaturki do atrybutów jednakże zdziwiła mnie jedna rzecz. Otóż. Zmienna $images w product.tpl przypisana jest ProductController.php w protected function assignImages() i tam jest funkcja getImages, która pobiera zdjęcia sortowane po position. I w takiej kolejności ta tablica wypluta jest zarówno w końcówce funkcji jak i w product.tpl gdy z print_rujemy zmienną.
Jednakże gdy użyję w product.tpl {addJsDef images=$images} to indeksy tej zmiennej w JS są już posortowane po kluczu czyli id_obrazka a nie po position czyli kolejność nie jest taka jak w zmiennej dostępnej w .tpl i php. Ktoś wie dlaczego? Klucze tablicy muszą być id_image bo nie chcę definiować osobnego $images ze względu na wydajność.
Edit: Póki co ogarnąłem, że w Media.php jest funkcja
public static function addJsDef($js_def) { if (is_array($js_def)) { foreach ($js_def as $key => $js) { Media::$js_def[$key] = $js; } } elseif ($js_def) { Media::$js_def[] = $js_def; } }
i nią się bawię.
Edit 2: Poległem jednak i posortowałem to inaczej już w Javascripcie, usuwając id_image z klucza, mam go w wartościach więc jakoś sobie poradzę. A poległem ponieważ otrzymałem obiekt a nie tablicę.
var sorted_images = []; $.each(images, function(k,v){ sorted_images.push(v); }); delete images;
Ale koniec końców efekt osiągnąłem Nareszcie miniatury zdjęć przypisanych do kombinacji jeśli istnieją to są wyświetlone w wyborze atrybutu. Jeśli nie to wyświetla się domyślna grafika/kolor atrybutu. (do tego doszło więcej pracy)