Привет Посоветуйте куда покопать, чтобы научится правильной логики формирования страницы. Есть api, возвращающая много блоков данных(заказ, клиент, товар, оплаты, комментарии), внутри каждого блока данных много строк с данными. Есть шаблон страницы html(bootstrap) который надо заполнить данными. Вопрос - как правильно делать разметку данных внутри html шаблона. Например блок Клиент Имя клиента [Статус] Кол-во заказов / Кол-во обращений Номер паспорт Серия паспорта У меня мне кажется бредовая идея в виде <p> прометить через classe и в ручную метчить ключ из json и класс. Но есть ситуация еще сложней, когда есть исторические данные много строк. Например таблица комментариев Каждый комментарий выводится в строчку Дата [Менеджер] Комментарий - и нужно чтобы jQuery создал столько строк, сколько в JSON Тут именно вопрос, чтобы Вы мне подсказали что почитать, какая методология метчинга данных из API и Фронта наиболее оптимальная Благодарю
Возможно вы имели ввиду JS шаблонизатор. Если да, то вот статья про то, как это сделать с помощью популярной библиотеки lodash https://learn.javascript.ru/template-lodash Было бы классно использовать vue или react, чтобы не использовать эти js шаблонизаторы, так как эти js шаблонизаторы снижают читабельность кода. Пример: Код (Javascript): <!-- библиотека LoDash --> <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"></script> <!-- шаблон для списка от 1 до count --> <script type="text/template" id="list-template"> <ul> <% for (var i=1; i<=count; i++) { %> <li><%=i%></li> <% } %> </ul> </script> <script> var tmpl = _.template(document.getElementById('list-template').innerHTML); // ..а вот и результат var result = tmpl({count: 5}); ddocument.body.appendChild(result); </script> Я бы всеми силами избегал js шаблонизаторы. Либо html готовый с бэкенда возвращать, либо JSON, но при этом использовать react или vue.
@виталий032 если говорить про html готовый Вы имеет ввиду не JSON данные возвращать, а сразу подготовленный html код под каждый блок? Чтобы тупо замещать весь div кодом с бэкэнда? Кстати пользуясь случае спрошу, как Вы рекомендуете писать код HTML внутри php файлов? У меня вся генерация данных в API, на фронте в php только формирование шаблонов
Да Да Я бы формировал html на стороне сервера. Только немного по-другому. У вас html и php код похоже в одном файле. Вынесите html в отдельный файл имя.html и делайте его include в php файле. PHP: <?php $data = 'мои данные'; include('имя.html'); Кстати, пользуясь случаем, что это за функция pd()?
@виталий032 print-debug обработчик для быстрого дебага на странице самописная. А как в HTML фаил из переменной $data данные будут попадать? <h5><?=$data['attr']?></h5> Так? Но ведь есть еще логическое ветвление if-else показ инфы.
Верно. Все переменные, которые объявите до include будут доступны в html файле. Можно завести переменную $billingListIsEmpty в php файле, а в html файле делать вот так: HTML: <div> <?php if ($billingListIsEmpty) { ?> <span><?=$data['ключ']</span> <?php } else {?> <span>Упс.</span> <?php } ?> </div> Либо используя short tags (https://www.php.net/manual/ru/control-structures.alternative-syntax.php) HTML: <div> <?php if ($a == 5): ?> <span>A равно 5</span <?php endif; ?> </div>
@IvanKut нормальная верстка не мудри. Но чтобы не запутаться в скобочках у условии или циклов, обычно используют такие обозначения: PHP: <?php if ($a == 5): ?> <div>123</div> <?php endif; ?> <?php foreach ($array as $item): ?> <li><?=$item?></li> <?php endforeach; ?> Это просто чтобы не запутаться в скобочках. Не надо никаких html. --- Добавлено --- @виталий032 чему ты учишь человека, какие html еще. Как пятая нога --- Добавлено --- просто чтоб понимали что все нормально, вот стандартная верстка у Laravel: PHP: @if (count($errors) > 0) <!-- Список ошибок формы --> <div class="alert alert-danger"> <strong>Упс! Что-то пошло не так!</strong> <br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif Вот у Yii: PHP: <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name') ?> <?= $form->field($model, 'email') ?> <div class="form-group"> <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?>
@Artur_hopf про сокращенную вариацию написания if foreach спасибо не знал! Жалко они еще не придумали сокращенную варианцию if(!empty($_REQUEST['field']))