To będzie nieładny sposób, ale bez przeczytania ich poradnika dla deweloperów nic profesjonalnego nie wymyślę. Po upgradowaniu to zapewne zostanie nadpisane, albo i nie, nie wiem... Normalnie powinno się napisać jakieś rozszerzenie obecnej funkcjonalności.
Ten nagłówek stopki z dużymi ikonami, wyświetlany jest z templatki modules/blockreinsurance/blockreinsurance.tpl, linia 30:
<li><img src="{$module_dir}img/{$info.file_name}" alt="{$info.text|escape:html:'UTF-8'}" /> <span>{$info.text|escape:html:'UTF-8'}</span></li>
Żeby przerobić statyczne obrazki i tekst wystarczy dołożyć tam tag A:
<li><a href="???"><img src="{$module_dir}img/{$info.file_name}" alt="{$info.text|escape:html:'UTF-8'}" /> <span>{$info.text|escape:html:'UTF-8'}</span></a></li>
Jaki url do "href"? Na pewno trzeba go przekazać do zmiennej
$infos, bo w niej jest tablica po której iteruje
foreach.
No i tutaj sprawa się komplikuje, bo wartości w tej zmiennej pobierane są z bazy (
Blockreinsurance::getListContent()) (funkcja
Blockreinsurance::installFixtures() od której zacząłeś ten temat używana jest chyba tylko podczas instalacji, do ustawienia domyślnych wartości w bazie). Żeby to porządnie zrobić trzeba by zacząć od rozszerzenia tabeli w bazie i kolejnych metod różnych klas operujących na tych danych. To zbyt zaawansowane jak dla mnie bo to moja pierwsza styczność z PrestaShop i nie mam pojęcia jak profesjonalnie zrobić takie rozszerzenie. Ale po macoszemu...
Zmienne przekazywane są do templatki w
Blockreinsurance::hookFooter(). Dwia wiersze z tej metody:
$infos = $this->getListContent($this->context->language->id);
$this->context->smarty->assign(array('infos' => $infos, 'nbblocks' => count($infos)));
Pierwszy wiersz - pobranie listy elementów z bazy. Drugi - przekazanie do templatki.
No to spróbujmy między tymi dwoma wierszami dodać do tablicy
$infos url'e. Ale jak wygląda teraz tablica
$infos? (gdyby mi się udało to zainstalować to dałbym var_dump, ale że się nie udało...) Tam w metodzie
getListContent zwracany jest wynik funkcji
executeS z klasy
DbCore. Po przeanalizowaniu tego, co się dzieje ze zmienną
$result_array zwracaną przez tą funkcję, widać, że zwracana tablica jest autonumerowaną listą kluczy (0, 1, 2, ...) zawierających tablicę nazw kolumn z wartościami. Nazwy kluczy w naszej
$infos są w
Blockreinsurance::getListContent() (
SELECT r.`id_reinsurance`, r.`id_shop`, r.`file_name`, rl.`text`), czyli po świeżej instalacji, tablica infos powinna wyglądać dokładnie tak:
Kod
$infos = array(
0 = array(
'id_reinsurance' => 1,
'id_shop' => 1,
'file_name' => 'reinsurance-1-1.jpg',
'text' => 'Money back'
),
1 = array(
'id_reinsurance' => 2,
'id_shop' => 1,
'file_name' => 'reinsurance-2-1.jpg',
'text' => 'Exchange in-store'
),
2 = array(
'id_reinsurance' => 3,
'id_shop' => 1,
'file_name' => 'reinsurance-3-1.jpg',
'text' => 'Payment upon shipment'
),
3 = array(
'id_reinsurance' => 4,
'id_shop' => 1,
'file_name' => 'reinsurance-4-1.jpg',
'text' => 'Free Shipping'
),
4 = array(
'id_reinsurance' => 5,
'id_shop' => 1,
'file_name' => 'reinsurance-5-1.jpg',
'text' => '100% secured payment'
)
)
No to dodajmy tam wpisy dotyczące url'i:
$infos = $this->getListContent($this->context->language->id);
// oczywiście zmień te url'e na takie jakie Ci odpowiadają
$infos[0]['url'] = '/index.php?controller=history';
$infos[1]['url'] = '/index.php?controller=contact';
$infos[2]['url'] = '/';
$infos[3]['url'] = '/whatever/';
$infos[4]['url'] = '/index.php?controller=sitemap';
$this->context->smarty->assign(array('infos' => $infos, 'nbblocks' => count($infos)));
Teraz pozostało uaktualnić templatke, żeby url'e wpisywały się w atrybut "href":
<li><a href="{$info.url}"><img src="{$module_dir}img/{$info.file_name}" alt="{$info.text|escape:html:'UTF-8'}" /> <span>{$info.text|escape:html:'UTF-8'}</span></a></li>
Tak jak już chyba pisałem, to nieładna metoda - url'e są niekonfigurowalne, na stałe wpisane w kod źródłowy, metody rdzenia są zmodyfikowane "na chama" a nie rozszerzone... ale może wystarczy.