Поддержка Проблемы и решения PHP+Jquery — проблема с выводом значений в таблицу

  • Решено Chicago61

    (@chicago61)


    Добрый вечер друзья.
    Делаю сейчас параллельно 2 сайта на Вордпрес и DLE. Столкнулся с небольшой проблемой и решил обратиться сюда, т.к. знаю — здесь люди грамотные…
    В общем, данная конструкция выводит значения в таблицу, которая сортирует их по алфавиту. Т.е. например при нажатии на ссылку А должны показываться только имена на букву А и т.д.

    Код PHP:

    <?php
    
    include ('engine/api/api.class.php'); // подключаем api
    $table = 'dle_post';  // название таблицы
    $fields  = 'xfields'; // нужные поля, * - все поля
    $where = 'approve=1'; // условия выборки
    $multirow = 1; // забирать ли один ряд или несколько
    $start = 0; // начальное значение выборки
    $limit = 0; // количество записей для выборки, 0 - выбрать все
    $xfield = 'actor'; ///ИМЯ ДОП ПОЛЯ ДЛЯ ВЫВОДА
    $time = '14000'; //время жизни кеша
    $tr_new = 0; //В самом начале файла объявляем переменную
    
    $xfields = $dle_api->load_from_cache ($fields, $time, $xfields); //берем наш кеш, если есть конечно ))
    if( !$xfields ) { //проверяем взяли ли мы кеш и если не взяли, то делаем запрос
        $xfields = $dle_api->load_table ($table,$fields,$where,$multirow,$start,$limit); //делаем запрос к бд
        $dle_api->save_to_cache ( xfields, $xfields); //сохраняем в кеш
        }
    
    $stack = array(); //создаем пустой массив
    foreach($xfields as $value){  // перебор значений массива
        if($value[xfields]){ //проверяем есть ли элемент в массиве
    
            $row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
            if($row[$xfield]){ //проверяем есть ли значение
    
                $rowdata = explode( ",", $row[$xfield]); //разбиваем наше значение на массив
                foreach($rowdata as $value){    //перебираем значения массива
                    if($value){                    //проверяем есть ли значение
                        $value = trim($value);    //убираем пробелы
                        array_push($stack, $value); //добавляем в конец массива полученное значение
                        asort($stack);         //сортировка
                        }
                    }
                }
            }
        }
    $stack = array_count_values($stack); //считаем повторы и избавляемся от повторных значений
    foreach($stack as $key => $count){  //выводим окончательный вариант
    
    if($tr_new === 0){ //Если значение равно нулю открывает новый TR
        echo '<tr class="new">';
        }
    
        echo "<td class='blok'>"; //открываем td
        echo "<a href=/" . $xfield . "/";  //открываем ссылку
        echo $key; //подставляем значение для поиска
        echo " target='_blank' rel='noopener'>";
        echo $key; //имя ссылки
        echo "</a>"; //закрываем ссылку
        echo "<span>";  //открываем спан
        echo "(" . $count . ")";//кол-во повторов
        echo "</span>"; //закрываем спан
        echo "</td>"; //закрываем td
    
        $tr_new++; //Добавляем единицу
        if($tr_new === 1){ //Прошло 1 значение, значит закрываем TR и обнуляем счетчик
        echo '</tr>';
        $tr_new = 0;
        }
    }

    Теперь JQuery:

    $(function () {
        var _alphabets = $('.alphabet > a');
        var _contentRows = $('#countries-table tbody tr');
    
        _alphabets.click(function () {
            var _letter = $(this), _text = $(this).text(), _count = 0;
    
            _alphabets.removeClass("active");
            _letter.addClass("active");
    
            _contentRows.hide();
            _contentRows.each(function (i) {
                var _cellText = $(this).children('td').eq(0).text();
                if (RegExp('^' + _text).test(_cellText)) {
                    _count += 1;
                    $(this).fadeIn(400);
                }
            });
        });
    });

    Выводится на страницу так:

    <div class="alphabet">
    <a class="first" href="#">А</a>
    <a href="#">Б</a>
    <a href="#">В</a>
    и т.д.
    <a class="last" href="#">Я</a></div>
    <div id="conutries">
    <table id="countries-table">
    <tbody>
    {include file="/код.php"}
    </tbody>
    </table>
    </div>
    </div>

    Все работает, однако столкнулся с такой проблемой — получается корректно вывести только одно значение в одну строку tr…
    вывод значений построчно

    при попытке например вывести 4 значения в строку if($tr_new === 4) — они не сортируются по алфавиту, а просто выводятся вот так:
    вывод значений в одну строку

    Как и что нужно подправить, чтобы все корректно работало?
    Заранее спасибо за помощь!