Должен ли я всегда хранить строку HTML вместо того, чтобы распечатывать ее части во время?

Я сталкивался с десятками сценариев, в которых HTML echoвышел бы вместо того, чтобы быть сохраненным. Мне интересно, является ли это хорошей практикой всегда хранить html в строке из-за гибкого характера?

Случайным примером будет то, что у меня есть функция, которая возвращает HTML для динамического subnavigation. Я печатаю открывающий тег div, печатаю его содержимое, а затем печатаю конечный тег div отдельно:

<div id="nav">
<?php echo $nav->getHTML();?>
</div>

Однако теперь я должен назначить специальный класс #nav div на основе количества элементов списка и суммы символов внутри $nav->getHTML() превышает определенную сумму, чтобы отдельно назначить другую line-height а также height, Для этого я должен загрузить его в DOMDocument и использовать DOMXpath и сделать некоторые оценки.

      html = '<div id="nav">';
      html.= $nav->getHTML();

      dom = new DOMDocument(); // create a DOM tree 
      xpath = new DOMXpath($d); // create a DOM Xpath tree

      // bunch of DOM querying/manipulation

      html.= '</div>';

Я думаю, не лучше ли всегда хранить что-то подобное, чтобы сделать вещи более гибкими для будущих запросов, требующих манипуляции со строками? Или я просто излишне беспокоюсь? Или, может быть, я поступаю неправильно, и мне нужно реорганизовать мой класс, чтобы выполнять запросы DOM внутри, а не снаружи?

РЕДАКТИРОВАТЬ: После того, как я определю, является ли ul будет охватывать несколько строк (это горизонтальный список) на основе ограничения символов (скажем, 200) Я добавлю специальный класс в #nav пункт, а затем делать стили в CSS.

Отказ от ответственности: я не хочу полагаться на JS вообще. Я знаю, что могу решить эту проблему, но я хочу, чтобы он немедленно отобразился правильно.

3 ответа

Разбор сгенерированного HTML для выведения бизнес-логики / логики рендеринга не очень хорошая идея. Я бы предпочел другую функцию с именем "getClass", которая возвращает класс на основе количества элементов списка или суммы символов внутри $nav->getHTML().

Я бы сказал, что, поскольку в данном случае вы знаете, что строка является объектом манипулирования, сохранение ее теперь имеет смысл. Если вы создаете шаблон или другое представление, которое не подвергается каким-либо манипуляциям на стороне сервера, вы обнаружите, что сходите с ума, отслеживая все свои задания, большинство из которых вы никогда не коснетесь.

Теперь, для вашей реальной проблемы, кажется, что вам не нужны манипуляции на стороне сервера, но некоторые жесткие CSS. Это, вероятно, будет соответствовать общей наилучшей практике разделения стиля, содержания и поведения.

Лично я неохотно выкладываю детали презентации (вроде вычислений line-height или же height свойства, которые вы упомянули) в сценарии на стороне сервера. Я бы попытался справиться с этим с помощью CSS или (в худшем случае) JavaScript.

В твоем случае я мало что знаю $nav, но вы не можете рассчитать line-height а другие во время его генерации, а не из источника? Скажи, есть getHeight а также getLineHeight методы в дополнение к getHTML,

Другие вопросы по тегам