Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как организовать правильный вывод алфавитного меню?

Как организовать правильный вывод алфавитного меню?


     01.05.2015    Общие вопросы по PHP, Модули, MySQL    2528

вопрос
День добрый,

откопал один интересный модуль. В принципе он работает, НО... есть одно но. Он обрабатывает не всё верно.

вот, сам модуль:

в файл 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' );
            
            
        }

Ответа пока нет


Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх