Что лучший способ состоит в том, чтобы обработать рекурсию в присяжном острослове?

Оптимально ли хранить все отдельные данные журнала набора в одной таблице (записи журнала)?

По всей вероятности, да, исключение будет, если количество строк вырос, чтобы негативно повлиять на время отклика.

Должны ли таблицы «Тип упражнения» и «Оборудование» быть отдельными или просто столбцами в «Таблице упражнений»? То же самое относится и к типу тренировки

Они должны быть отделены друг от друга, чтобы уменьшить ненужное дублирование и выдать, например, если вам нужно изменить тип или оборудование, вам придется применить это изменение ко всем строкам в таблице упражнений с отдельной таблицей, вам просто нужно внести одно изменение.

Будет ли это хорошим подходом с точки зрения производительности / удобства использования?

За исключением таблицы Log (в том виде, в каком она есть, включая получение даты), тогда она выглядит как хороший и эффективный подход. Таблица «Журнал» не нужна, поскольку в таблице «Записи журнала» есть столбец для даты и времени (поэтому в ответ на комментарий «да» было бы лучше использовать дату / время в записях журнала и покончить с журналом таблицу).

7
задан 4 revs, 2 users 100% 13 January 2009 в 15:24
поделиться

3 ответа

"Для понимания рекурсии необходимо сначала понять рекурсию..."

Просто ребячество. Это должно сделать то, что Вы хотите:

<?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}

Вот хорошее учебное руководство для того, чтобы сделать пользовательские функции Присяжного острослова:

Создание пользовательских функций присяжного острослова

Знайте о зависимости, которую этот пример имеет на Вашей базовой структуре данных. Кроме того, имейте в виду, что необычно длинный или глубоко вложенный набор данных мог быть действительно медленным. Управляйте своей сложностью, сохраните вещи хорошо зарегистрированными, и необходимо быть в порядке.Удачи!

6
ответ дан 6 December 2019 в 10:04
поделиться

Лучший способ не состоит в том, чтобы сделать этого.

Присяжный острослов, как предполагается, прост. Этот deesn't звучит как он.

-4
ответ дан 6 December 2019 в 10:04
поделиться

Вы могли бы хотеть рассмотреть создающую пользовательскую функцию/модификатор/плагин для присяжного острослова. Передайте массив пользовательской функции наряду с определением, что является шаблоном, который должна использовать функция. Если это настолько просто, только чтобы вставить текст в определенное место, загрузить шаблон в функции и в работе PHP с шаблоном с помощью regexes/str_replace/...

Или сделайте это непосредственно в PHP, не используя шаблоны присяжного острослова, потому что все, в чем Вы нуждаетесь, является h1, ул., литий и теги p и изменить расположение используют CSS.

Или если Ваше беспокойство является издержками с открытием и заключительными файлами в Присяжном острослове, оцените то, что является количеством уровней в 90% случаев, и создайте шаблон, который покроет те 90%. Поскольку остальные используют рекурсию включением самого шаблона...

0
ответ дан 6 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: