Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокрытие повторяющихся данных при постороении 
:(
    Опции темы
Jops
Дата 26.3.2013, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.1.2013

Репутация: нет
Всего: нет



Здравствуйте уважаемые!
Моя проблема проста, но тупиковая. А может и наоборот.
Значит, есть данные из БД. На их основе формируется элементарная таблица (первая таблица на рисунке во вложении). Соответственно надо сделать так, что бы она отображалась, как вторая таблица на рисунке во вложении. То есть после вывода значений первого и второго столбца в строке, не выводить их клоны в нижележащих строках (нужно учесть, что цифры первого столбца могут повторяться, где либо ниже, ну а второй столбец уникален, с ним проблем нет). 
Думал в форум по JS обратиться, но может, есть способ именно в php при работе с массивами реализовать это.

Это непосредственно код формирования ячеек в таблице (на лишнее не обращайте внимание, там распарсивается XML и другие, не касающиеся проблемы нюансы):

Код

while ($data = pg_fetch_array($res)) {
            //$filename = "/record/{$data['path']}-in-city-{$data['caller']}.mp3";
            if (in_array($data['call_type'], array(1, 2))) {
                $xml = simplexml_load_string($data['comm']);
                $data['comm'] = array();
                foreach ($xml->phrase as $phrase) {

                    if (!empty($phrase->comm)) {
                        $data['comm'][] = sprintf('<span title="%s" class="t-line">%s</span>', $phrase->comm, $phrase->title);
                    } else {
                        $data['comm'][] = $phrase->title;
                    }
                }
                $data['comm'] = implode(', ', $data['comm']);
            }
            
            echo "<tr>
                <td>{$data['count']}</td>
                <td>" . sprintf($links[$data['call_type']]['user'], $data['user_id'], $data['user_name']) . "</td>
                <td>{$data['agent_num']}</td>
                <td>{$data['call_time']}</td>
                <td>{$data['user_num']}</td>
                <td>{$data['comm']}</td>
                <td>" . (($data['dem_id'] > 0) ? sprintf($links[$data['call_type']]['demand'], $data['dem_id'], $data['dem_id']) : '') . "</td>
                <td id=\"{$data['id']}\" class=\"player\">
                    <a href=\"javascript:void(0)\" onclick=\"showAudioPlayer({$data['id']}, '$filename', '{$data['caller']}')\">Показать плеер</a>
                    <div id=\"player{$data['id']}\"/>
                </td>
            </tr>";
    }


И если интересно, то сама функция:

Код

function rep_incoming_calls_period_list($db) {
        echo "<script src=\"/scripts/audio-player.js\" type=\"text/javascript\"></script>
        <script type=\"text/javascript\">
            AudioPlayer.setup(\"/flash/audioplayer.swf\", {
                width: 290,
                autostart: \"yes\",
                animation: \"no\"
            });
        </script>";

        $sid = $_GET['id'];
        $start = isset($_GET['start']) ? $_GET['start'] : date("Y-m-d");
        $end = isset($_GET['end']) ? $_GET['end'] : date("Y-m-d");
        echo "<form method='get' action=''>
        <input type='hidden' name='action' value='{$_GET['action']}' />
        <input type='hidden' name='type' value='{$_GET['type']}' />
        <table>
            <tr>
                <td>Начало периода</td>
                <td>Конец периода</td>
                <td></td>
            </tr>
            <tr>
                <td>
                    <input type='text' id='data_start' name='start' value='$start' readonly='readonly' size='10' />
                    <input type='button' value='...' id='trigger_start' />
                </td>
                <td>
                    <input type='text' id='data_end' name='end' value='$end' readonly='readonly' size='10' />
                    <input type='button' value='...' id='trigger_end' />
                </td>
                <td><input type='submit' value='Показать' /></td>
            </tr>
        </table>
        </form>
        <table class='t-list awidth'>
            <tr>
                <th><div>Количество звонков</div></th>
                <th><div>ФИО</div></th>
                <th><div>Вн. номер</div></th>
                <th><div>Время</div></th>
                <th><div>Номер</div></th>
                <th><div>Причина</div></th>
                <th><div>Оформил</div></th>
                <th><div></div></th>
            </tr>";
        create_calendar();
        $sql = "SELECT 
    c.id as cid, coalesce(dt.cnt,0) AS count,
    CASE WHEN call_type = 1 THEN u.full_name WHEN call_type = 2 THEN c.full_name WHEN call_type = 3 THEN e.full_name ELSE '' END as user_name, 
    c.agent_num, to_char(c.call_time, 'YYYY-MM-DD HH24:MI:SS') as call_time, 
    CASE WHEN call_type = 1 THEN u.id WHEN call_type = 3 THEN e.id ELSE 0 END as user_id,
    c.user_num, c.call_type, 
    CASE WHEN call_type IN (1, 2) THEN p.phrases ELSE c.comm END as comm,
    CASE WHEN call_type IN (1, 2) THEN dem_id ELSE 0 END as dem_id, l.id, l.caller, to_char(l.datestart, 'YYYY/MM/DD/YYYYMMDD-HH24MISS') as path
    FROM calls.incoming_calls as c
    INNER JOIN users as u ON u.id = c.user_uid
    LEFT JOIN (SELECT c.id, count(*) over (partition by c.user_uid) as cnt 
    FROM calls.incoming_calls as c WHERE call_time<='$end 23:59:59' AND call_time>='$start 00:00:00') AS dt ON dt.id = c.id
    LEFT JOIN staff.employees as e ON e.id = c.user_uid
    LEFT JOIN ivr.logcalls l ON c.call_parentid=l.id
    LEFT JOIN (
        SELECT c.id, xmlforest(xmlagg(xmlforest(xmlforest(phrase as title, CASE WHEN p.textarea THEN comm ELSE '' END as comm) as phrase)) as phrases)::character varying as phrases
        FROM (SELECT id, unnest(phrases[1:array_upper(phrases, 1)][1:1])::integer as phrase_id, unnest(phrases[1:array_upper(phrases, 1)][2:2]) as comm
        FROM calls.incoming_calls as c) as c
        INNER JOIN account.phrases as p ON p.id = c.phrase_id
        GROUP BY 1) as p ON p.id = c.id
    WHERE dt.cnt >= 5 AND call_time<='$end 23:59:59' AND call_time>='$start 00:00:00'
    ORDER BY 6, 5 DESC;";
        $res = @pg_query($db, $sql) or die_query("Что-то пошло не так", $sql);
        $links = array(
            1 => array(
                'user' => '<a target="_blank" href="?action=view_uc&id=%1$d">%2$s</a>',
                'demand' => '<a target="_blank" href="?action=edit_dem&id=%1$d">%2$d</a>',
            ),
            2 => array(
                'user' => '%2$s',
                'demand' => '<a target="_blank" href="?action=online&id=%1$d">%2$d</a>',
            ),
            3 => array(
                'user' => '<a target="_blank" href="?action=emp_edit&id=%1$d">%2$s</a>',
                'demand' => '',
            ),
            4 => array(
                'user' => '',
                'demand' => '',
            ),
        );
        
            while ($data = pg_fetch_array($res)) {
            //$filename = "/record/{$data['path']}-in-city-{$data['caller']}.mp3";
            if (in_array($data['call_type'], array(1, 2))) {
                $xml = simplexml_load_string($data['comm']);
                $data['comm'] = array();
                foreach ($xml->phrase as $phrase) {

                    if (!empty($phrase->comm)) {
                        $data['comm'][] = sprintf('<span title="%s" class="t-line">%s</span>', $phrase->comm, $phrase->title);
                    } else {
                        $data['comm'][] = $phrase->title;
                    }
                }
                $data['comm'] = implode(', ', $data['comm']);
            }
            
            echo "<tr>
                <td>{$data['count']}</td>
                <td>" . sprintf($links[$data['call_type']]['user'], $data['user_id'], $data['user_name']) . "</td>
                <td>{$data['agent_num']}</td>
                <td>{$data['call_time']}</td>
                <td>{$data['user_num']}</td>
                <td>{$data['comm']}</td>
                <td>" . (($data['dem_id'] > 0) ? sprintf($links[$data['call_type']]['demand'], $data['dem_id'], $data['dem_id']) : '') . "</td>
                <td id=\"{$data['id']}\" class=\"player\">
                    <a href=\"javascript:void(0)\" onclick=\"showAudioPlayer({$data['id']}, '$filename', '{$data['caller']}')\">Показать плеер</a>
                    <div id=\"player{$data['id']}\"/>
                </td>
            </tr>";
    }
    ?>
        </table>
      
    <script type="text/javascript">
        $(document).ready(function() {
            $('.t-list span[title]').tooltip();
            $(".t-list tr").mouseover(function(){
                $(this).addClass("over");
            });
            $(".t-list tr").mouseout(function(){
                $(this).removeClass("over");
            });
        });
    </script>
    <?
}




Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Таблица.jpg 136,57 Kb
PM MAIL   Вверх
Arantir
Дата 26.3.2013, 14:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Сделайте временную переменную, содержащую значение колонки прошлой строки. Вставляйте в текущей строке значение только при условии, что оно отличается от предыдущего.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Jops
Дата 26.3.2013, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.1.2013

Репутация: нет
Всего: нет



Спасибо! Попробую!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.