Bildiğiniz gibi, Blocktopmenu özelleştirmek için gerçek acıdır.
Menünün kendisi için şablon dosyası yok. Oluşturmayı özelleştirmek için modülü kesmeniz (veya geçersiz kılmanız) gerekecektir. Örneğin, li
ve ul
öğelerine bazı sınıfları ve kimlikleri eklemek zorundaydım. İşte
dosyası
/modules/blocktopmenu/blocktomenu.php
içindeki varsayılan
generateCategoriesMenu()
yöntemdir:
protected function generateCategoriesMenu($categories, $is_children = 0)
{
$html = '';
foreach ($categories as $key => $category) {
if ($category['level_depth'] > 1) {
$cat = new Category($category['id_category']);
$link = Tools::HtmlEntitiesUTF8($cat->getLink());
} else {
$link = $this->context->link->getPageLink('index');
}
/* Whenever a category is not active we shouldnt display it to customer */
if ((bool)$category['active'] === false) {
continue;
}
$html .= '<li'.(($this->page_name == 'category'
&& (int)Tools::getValue('id_category') == (int)$category['id_category']) ? ' class="sfHoverForce"' : '').'>';
$html .= '<a href="'.$link.'" title="'.$category['name'].'">'.$category['name'].'</a>';
if (isset($category['children']) && !empty($category['children'])) {
$html .= '<ul>';
$html .= $this->generateCategoriesMenu($category['children'], 1);
if ((int)$category['level_depth'] > 1 && !$is_children) {
$files = scandir(_PS_CAT_IMG_DIR_);
if (count(preg_grep('/^'.$category['id_category'].'-([0-9])?_thumb.jpg/i', $files)) > 0) {
$html .= '<li class="category-thumbnail">';
foreach ($files as $file) {
if (preg_match('/^'.$category['id_category'].'-([0-9])?_thumb.jpg/i', $file) === 1) {
$html .= '<div><img src="'.$this->context->link->getMediaLink(_THEME_CAT_DIR_.$file)
.'" alt="'.Tools::SafeOutput($category['name']).'" title="'
.Tools::SafeOutput($category['name']).'" class="imgm" /></div>';
}
}
$html .= '</li>';
}
}
$html .= '</ul>';
}
$html .= '</li>';
}
return $html;
}
Ve burada /override/modules/blocktopmenu/blocktopmenu.php
içinde benim Hack şudur: html kodu, bu classe içine oluşturulur görebileceğiniz gibi
<?php
if (!defined('_PS_VERSION_'))
exit;
class BlocktopmenuOverride extends Blocktopmenu
{
protected function generateCategoriesMenu($categories, $is_children = 0)
{
$html = '';
foreach ($categories as $key => $category) {
if ($category['level_depth'] > 1) {
$cat = new Category($category['id_category']);
$link = Tools::HtmlEntitiesUTF8($cat->getLink());
} else {
$link = $this->context->link->getPageLink('index');
}
if ((bool)$category['active'] === false) {
continue;
}
$html .= '<li id="menu-category-'.(int)$category['id_category'].'" class="'.(($this->page_name == 'category'
&& (int)Tools::getValue('id_category') == (int)$category['id_category']) ? 'sfHoverForce' : '').' menu-category-element-depth-' . (int)$category['level_depth'] . ' ' . ((isset($category['children']) && !empty($category['children'])) ? 'has-child' : '') . '">';
$html .= '<a href="'.$link.'" title="'.$category['name'].'"><span>'.$category['name'].'</span></a>';
if (isset($category['children']) && !empty($category['children'])) {
if ((int)$category['level_depth'] >= 3) {
$categoryLink = '<a href="'.$link.'">'.$category['name'].'</a>';
$html .= '<div class="sfCatLink">'.sprintf($this->l('Accéder aux articles %s'), $categoryLink).'</div>';
}
$html .= '<ul id="menu-category-' . (int)$category['id_category'] . '-childrens" class="menu-category-depth-' . (int)$category['level_depth'] . '">';
if ((int)$category['level_depth'] <= 4) {
$html .= $this->generateCategoriesMenu($category['children'], 1);
}
$html .= '</ul>';
}
$html .= '</li>';
}
return $html;
}
}
şablon dosyalarını çağırmadan.
ohh! Teşekkür ederim, ama alt menünün alt menüye tüm alt menülere resim eklemek istediğim için özelleştirmesi zor. –
Eğer bu ilk sorunuzu cevaplarsa, kabul edip bu özel gelişim için yeni bir soru açabilir misiniz? [Bir cevap nasıl kabul edilir?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –
Tamam, afedersin, cevabını kabul et. –