Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2016, 14:56   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Универсальность вывода инфы в таблицу на странице

Доброго времени суток.
Есть такая таблица на странице серий:
PHP код:
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>ID</th>
          <th>№ серии</th>
          <th>Описание</th>
          <th>Дата ввода</th>
          <th>№ полки</th>
        </tr>
      </thead>
      <tbody>
          <?php foreach ($seriesList as $list): ?>
            <tr>
                <td><?php echo $list['id_series'];?></td>
                <td><?php echo $list['number_series'];?></td>
                <td><?php echo $list['specification'];?></td>
                <td> <?php echo $list['input_date'];?></td>
                <td><?php echo $list['shelf_number'];?></td>
            </tr>
          <?php endforeach;?>
      </tbody>
    </table>
Показывает информацию по сериям.
Т.е. просто выводит инфу из таблицы БД в удобоваримую форму.
Но есть так же и другие 9-ть таблиц(выпуски, пользователи и т.п.) которые то же нужно выводить на другие страницы. Они точно такие же, только отличается название и количество столбцов и набор индексов массива( типа $seriesList['id_series'].../$seriesList['id_user'].../$seriesList['id_edit']...).
У меня только 1 идея, создать ещё 9-ть html страничек(шаблонов) на каждый контроллер, но это же не правильно.
Можно как то сделать универсально это?
Что бы все 10 контроллеров использовали 1 html шаблон.
Artsiom вне форума Ответить с цитированием
Старый 03.10.2016, 15:13   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А в чем проблема 9 шаблонов создать? У вас же разные таблицы там, мало ли что поменять надо будет.

Только шаблоны делать надо так, чтобы в них не пришлось копипастить весь остальной код страницы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.10.2016, 15:21   #3
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

В нетбинсе открыта папка контроллеров, моделей и представлений и уже становиться страшновато.
Конечно там ещё нужно будет добавить кучу всего, но всё же или + 10 страниц или только 1-на...

Есть ещё одна идея, хранить заголовки в контроллере и выводить их foretch.

А тело таблицы выводить через два вложеных foretch.


Тогда ещё есть вопрос.
Суперважный.
В этих 10-и контроллерах есть массив:
PHP код:
        $main_menu = array(
            
'<div>',
                
'<ul class="nav nav-tabs" role="tablist" style="margin: 0px 0px 0px 10px;">',
                    
'<li><a href="series">Главная страница</a></li>',
                    
'<li><a href="schange">Серии</a></li>',
                    
'<li class="active"><a href="appauthority">Утверждающие органы</a></li>',
                    
'<li><a href="productchange">Изменения в выпуске</a></li>',
                    
'<li><a href="developer">Разработчик</a></li>',
                    
'<li><a href="employees">Сотрудник</a></li>',
                    
'<li><a href="issues">Выпуски</a></li>',
                    
'<li><a href="status">Статусы</a></li>',
                    
'<li><a href="users">Пользователи</a></li>',
                    
'<li><a href="receipt">Выдача на руки</a></li>',
                
'</ul>',
            
'</div>'); 
Отличается только class="active".
Можно это как ни будь упростить? Или уже максимум из возможного?
Просто один и тот же код повторяется 10 раз с минимальным его изменением...
Artsiom вне форума Ответить с цитированием
Старый 03.10.2016, 18:14   #4
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Можно это как ни будь упростить? Или уже максимум из возможного?
Так или иначе структуру всё равно надо откуда-то брать. Имхо, максимум что можно сделать именно по этому куску кода:
Код:
$items = [
    ['name' => 'Главная', 'href' => 'series'],
    ['name' => 'Утверждающие', 'href' => 'appauthority', 'active' => true]
];

$main_menu = ['<div>', '<ul>'];

foreach($items as $item) {
    $main_menu[] =
        '<li><a ' . 
        ($item['active'] ? 'class="active" ' : '') . 
        'href="' . $item['href'].'">'.$item['name'].'</a></li>';
}

$main_menu += ['</ul>', '</div>'];
^-.-^ My GitHub

Последний раз редактировалось Fenex; 03.10.2016 в 18:16. Причина: зпт
Fenex вне форума Ответить с цитированием
Старый 03.10.2016, 18:47   #5
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
Можно как то сделать универсально это?
Что бы все 10 контроллеров использовали 1 html шаблон.
Можно и нужно. Лишние сущности плодить незачем. Пихаете всё (и заголовки и содержимое) в один массив, и выводите функцией bTable, главное передать ей правильный размер $col:
PHP код:
$arr = array(
'ID',    '№ серии',    'Описание',            'Дата ввода',    '№ полки',
2,        '13ed',        'Болт с резбой',    'завтра',        '666',
3,        'xx-l',        'Крутая штучка',    '1 апреля',        'в коробке справа'
);

echo 
bTable($arr5);
echo 
'<br>';
echo 
bTable($arr6);   // тест на "вшивость"

function bTable($arr$col$attr=" border=1 cellpadding=0 cellspacing=2 class='links'") {
    
// Минимальная проверка корректности данных:
  
if (empty($arr)) return 'bTable: empty array';
  
$arr_cnt count($arr);
  if (
$arr_cnt $col)  $col $arr_cnt;                        // 1 элемент в 2 ячейки на уложить :)
  
$cnt = (int)ceil($arr_cnt/$col)*$col;                            // Правильный размер, если размер массива не кратен $col
  
if ($cnt $arr_cnt)  $arr array_pad($arr$cnt'???');    // Добиваем массив но правильного размера, '???' чтобы видеть что косяк

  
$header array_slice($arr0$col);
  
$body array_slice($arr$col);
  
$tbl '<thead>
        <tr>'
          
.'<th>'.implode('</th><th>'$header).'</th>'.
        
'</tr>
      </thead>'
;
  for (
$i=1$row=''$res=''$i<=count($body); $i++) {
    
$row .= '<td>'.$body[$i-1].'</td>';
    if (
$i $col ==0) {
      
$res .= "<tr>$row</tr>";
      
$row '';
      }
    }
  if (
$res !='')  $tbl .= "<tbody>.$res</tbody>";
  return 
'<table'.($attr!='' ?' '.$attr :'').'>'.$tbl.'</table>';
  } 
Цитата:
Сообщение от Artsiom Посмотреть сообщение
В этих 10-и контроллерах есть массив: ...
Можно это как ни будь упростить? Или уже максимум из возможного?
Конечно. Формируете этот массив в цикле и проверяете у каждого элемента активен ли он (совпало ли содержимое его href с текущим url страницы).
Fenex выше показал алгоритм.

Можно сделать функцию-шаблон формирования этого массива и передавать её только номер активного пункта меню. Хранить массив практически одинаковых элементов - не очень красиво (но и не смертельно).

Последний раз редактировалось predefined; 03.10.2016 в 18:58.
predefined вне форума Ответить с цитированием
Старый 03.10.2016, 19:20   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Можно и нужно
а потом малейшее дунавение вызывает геморой по всему телу.
come-on вне форума Ответить с цитированием
Старый 03.10.2016, 20:52   #7
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
а потом малейшее дунавение вызывает геморой по всему телу.
Пример "дуновения" будет?
Считаете, проще лазить по коду и вносить исправления в 10 шаблонов? А при добавлении модели не забыть создать к ней отдельный 11-й шаблон?
predefined вне форума Ответить с цитированием
Старый 03.10.2016, 21:10   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну у автора странная задача вообще, раз страницы с пользователями и фильмами ничем не отличаются.

Непонятно для чего такое может понадобиться кроме какого-нибудь учебного хеллоуворлда по работе с БД (типа создания своего просмотрщика БД/phpMyAdmin)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 03.10.2016 в 21:14.
Alex11223 вне форума Ответить с цитированием
Старый 03.10.2016, 21:16   #9
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
Так или иначе структуру всё равно надо откуда-то брать. Имхо, максимум что можно сделать именно по этому куску кода:
Супер! Спасибо)

Цитата:
Сообщение от predefined Посмотреть сообщение
Можно и нужно. Лишние сущности плодить незачем. Пихаете всё (и заголовки и содержимое) в один массив, и выводите функцией bTable, главное передать ей правильный размер $col.
Спасибо, но я к сожалению не на столько хорошо знаю рнр. Сложно. Глаза спотыкаются обо всё.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну у автора странная задача вообще, раз страницы с пользователями и фильмами ничем не отличаются.
Непонятно для чего такое может понадобиться кроме какого-нибудь учебного хеллоуворлда по работе с БД (типа создания своего просмотрщика БД/phpMyAdmin)
Они отличаются. Есть Главная страница, она для просмотра серий и выпусков документов(собственно больше ничего пока не нужно).
Все остальные только для редактирования(там потом ещё будет кнопки редактировать/изменить/удалить).
Так будет для почти каждой таблицы БД.
Некоторые пункты меню вынесу в админский доступ(точнее все), некоторые оставлю специалисту, потом будет простой пользователь(без права редактирования, только главная страница).

Последний раз редактировалось Artsiom; 03.10.2016 в 21:24.
Artsiom вне форума Ответить с цитированием
Старый 03.10.2016, 22:57   #10
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
Спасибо, но я к сожалению не на столько хорошо знаю рнр. Сложно. Глаза спотыкаются обо всё.
У меня стиль форматирования кода остался в наследство от С++.
Функция отлажена, можете проверить на тестовом примере, он встроен.

Если всё-таки пока сложно - делайте 10 шаблонов по совету Alex11223. Бритва Оккама не рекомендует плодить сущности, но лучше, когда вы полностью понимаете и контролируете, что делает каждый участок вашего кода.
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
echo $num; ненужные для вывода символы не выводить на странице, использовать replace nikolokaputik80 PHP 6 29.03.2016 13:24
Парсер для поиска инфы на странице. dumaser79 PHP 0 13.06.2015 22:29
2 отчета на одной странице вывода В.В.С. Microsoft Office Access 1 05.03.2012 17:18
макрос вывода данных в итоговую таблицу maragva Microsoft Office Excel 3 10.11.2010 18:16
Сохранение инфы. IVANSour БД в Delphi 2 23.01.2009 21:09