вопрос
День добрый,
откопал один интересный модуль. В принципе он работает, НО... есть одно но. Он обрабатывает не всё верно.
вот, сам модуль:
в файл engine/modules/main.php добавляем это
в шаблон вставляю тег { menu }
вот содержание файлов шаблонов:
menu_block.tpl
menu_link.tpl
Вся суть проблемы в том, что неверно алфабетизирует русскоязычные названия.
видно лишь это:
все тайтлы идут под один спойлер, нежели под буквенный.
судя по всему, этот код ответственен за вывод меню
откопал один интересный модуль. В принципе он работает, НО... есть одно но. Он обрабатывает не всё верно.
вот, сам модуль:
в файл engine/modules/main.php добавляем это
/*Меню алфавитное*/
$alfa_menu = dle_cache( "menu_for_main", $config['skin'], true );
if ($alfa_menu === FALSE) {
$serials_alfa = Array();
$cats = $db->query("SELECT id,date,title,category,alt_name FROM " . PREFIX . "_post ORDER BY title ASC");
while ($row = $db->get_row($cats)) {
if (ord(substr($row['title'], 0, 1)) >= 48 AND ord(substr($row['title'], 0, 1)) <= 57)
$symbol = "0-9";
elseif ((ord(strtoupper(substr($row['title'], 0, 1))) >= 65) AND (ord(strtoupper(substr($row['title'], 0, 1))) <= 90))
$symbol = "A-Z";
else
$symbol = ord(substr($row['title'], 0, 1));
$serials_alfa[$symbol][$row['id']] = $row;
}
$tpl1 = new dle_template();
$tpl1->dir = TEMPLATE_DIR;
$tpl1->load_template( 'menu_block.tpl' );
foreach ($serials_alfa as $id => $array) {
if ($id == '0-9' OR $id == 'A-Z')
$tpl1->set("{symbol}", $id);
else
$tpl1->set("{symbol}", iconv('cp1251', 'utf-8',chr($id)));
$tpl1->set("{col}", count($array));
$tpl12 = new dle_template();
$tpl12->dir = TEMPLATE_DIR;
$tpl12->load_template( 'menu_link.tpl' );
foreach ($array as $key => $info) {
$link = $config['http_home_url'] .$info['id']."-". $info['alt_name'] . ".html";
$tpl12->set( '[full-link]', "<a href=\"" . $link . "\">" );
$tpl12->set( '[/full-link]', "</a>" );
$tpl12->set( '{name}', $info['title'] );
$tpl12->set( '{alt_name}', $info['metatitle'] );
$tpl12->set( '{id}', $info['id'] );
$tpl12->compile( 'menu_links' );
}
$tpl1->set("{menu_links}", $tpl12->result['menu_links']); unset($tpl12);
$tpl1->compile( 'alfa_menu' );
}
$alfa_menu = $tpl1->result['alfa_menu']; unset($tpl1);
create_cache( "menu_for_main", $alfa_menu, $config['skin'], true );
}
$tpl->set("{menu}", $alfa_menu);
в шаблон вставляю тег { menu }
вот содержание файлов шаблонов:
menu_block.tpl
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="{symbol}">
<h4 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse{symbol}" aria-expanded="false" aria-controls="collapse{symbol}">{symbol}<span class="badge">(фильмов: {col})</span></a>
</h4>
</div>
<div id="collapse{symbol}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="{symbol}">
<div class="panel-body">
<ul class="menu_2">
{menu_links}
</ul>
</div>
</div>
</div>
menu_link.tpl
<li>
[full-link]{name}[/full-link]
</li>
Вся суть проблемы в том, что неверно алфабетизирует русскоязычные названия.
видно лишь это:
все тайтлы идут под один спойлер, нежели под буквенный.
судя по всему, этот код ответственен за вывод меню
foreach ($serials_alfa as $id => $array) {
if ($id == '0-9' OR $id == 'A-Z')
$tpl1->set("{symbol}", $id);
else
$tpl1->set("{symbol}", iconv('cp1251', 'utf-8',chr($id)));
$tpl1->set("{col}", count($array));
$tpl12 = new dle_template();
$tpl12->dir = TEMPLATE_DIR;
$tpl12->load_template( 'menu_link.tpl' );
foreach ($array as $key => $info) {
$link = $config['http_home_url'] .$info['id']."-". $info['alt_name'] . ".html";
$tpl12->set( '[full-link]', "<a href=\"" . $link . "\">" );
$tpl12->set( '[/full-link]', "</a>" );
$tpl12->set( '{name}', $info['title'] );
$tpl12->set( '{alt_name}', $info['metatitle'] );
$tpl12->set( '{id}', $info['id'] );
$tpl12->compile( 'menu_links' );
}