Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как организовать правильный вывод алфавитного меню?

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


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

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

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

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

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

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


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

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