Оптимально ли хранить все отдельные данные журнала набора в одной таблице (записи журнала)?
blockquote>По всей вероятности, да, исключение будет, если количество строк вырос, чтобы негативно повлиять на время отклика.
Должны ли таблицы «Тип упражнения» и «Оборудование» быть отдельными или просто столбцами в «Таблице упражнений»? То же самое относится и к типу тренировки
blockquote>Они должны быть отделены друг от друга, чтобы уменьшить ненужное дублирование и выдать, например, если вам нужно изменить тип или оборудование, вам придется применить это изменение ко всем строкам в таблице упражнений с отдельной таблицей, вам просто нужно внести одно изменение.
Будет ли это хорошим подходом с точки зрения производительности / удобства использования?
blockquote>За исключением таблицы Log (в том виде, в каком она есть, включая получение даты), тогда она выглядит как хороший и эффективный подход. Таблица «Журнал» не нужна, поскольку в таблице «Записи журнала» есть столбец для даты и времени (поэтому в ответ на комментарий «да» было бы лучше использовать дату / время в записях журнала и покончить с журналом таблицу).
"Для понимания рекурсии необходимо сначала понять рекурсию..."
Просто ребячество. Это должно сделать то, что Вы хотите:
<?php
/*
* Smarty plugin
* ————————————————————-
* File: function.recurse_array.php
* Type: function
* Name: recurse_array
* Purpose: prints out elements of an array recursively
* ————————————————————-
*/
function smarty_function_recurse_array($params, &$smarty)
{
if (is_array($params['array']) && count($params['array']) > 0) {
$markup = '';
$markup .= '<ul>';
foreach ($params['array'] as $element) {
$markup .= '<li>';
$markup .= '<h1>' . $element['headline'] . '</h1>';
$markup .= '<p>' . $element['body'] . '</p>';
if (isset($element['children'])) {
$markup .= smarty_function_recurse_array(array('array' => $element['children']), $smarty);
}
$markup .= '</li>';
}
$markup.= '</ul>';
return $markup;
} else {
return 'not array';
}
}
Поместите файл в свою папку присяжного острослова/плагинов. Присвойте свой массив Присяжному острослову, затем называют его в Вашем шаблоне как так:
{recurse_array array=$data}
Вот хорошее учебное руководство для того, чтобы сделать пользовательские функции Присяжного острослова:
Создание пользовательских функций присяжного острослова
Знайте о зависимости, которую этот пример имеет на Вашей базовой структуре данных. Кроме того, имейте в виду, что необычно длинный или глубоко вложенный набор данных мог быть действительно медленным. Управляйте своей сложностью, сохраните вещи хорошо зарегистрированными, и необходимо быть в порядке.Удачи!
Лучший способ не состоит в том, чтобы сделать этого.
Присяжный острослов, как предполагается, прост. Этот deesn't звучит как он.
Вы могли бы хотеть рассмотреть создающую пользовательскую функцию/модификатор/плагин для присяжного острослова. Передайте массив пользовательской функции наряду с определением, что является шаблоном, который должна использовать функция. Если это настолько просто, только чтобы вставить текст в определенное место, загрузить шаблон в функции и в работе PHP с шаблоном с помощью regexes/str_replace/...
Или сделайте это непосредственно в PHP, не используя шаблоны присяжного острослова, потому что все, в чем Вы нуждаетесь, является h1, ул., литий и теги p и изменить расположение используют CSS.
Или если Ваше беспокойство является издержками с открытием и заключительными файлами в Присяжном острослове, оцените то, что является количеством уровней в 90% случаев, и создайте шаблон, который покроет те 90%. Поскольку остальные используют рекурсию включением самого шаблона...