2010-08-27 3 views
0

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

Случайный пример: у меня есть функция, которая возвращает html для динамической поднабора. Я печатая открытие 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 внутри, а не снаружи?

EDIT: После того как я определить, будет ли ul охватывать несколько строк (это горизонтальный список), основанный на пределе символов (скажем, 200), я добавлю специальный класс к #nav пункта и с тех пор на стилистике в CSS.

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

ответ

1

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

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

+0

Решая это чисто с CSS не представляется возможным. Я динамически манипулировать абсолютно позиционированный 'ul', который должен придерживаться нижней части другого элемента. Если есть несколько строк' li ', тогда мне нужно изменить высоту и высоту строки' ul'. Это также должно быть совместимо с несколькими браузерами Я не могу динамически «знать», если «ul» охватывает несколько строк или нет с чисто CSS. –

+0

Почему бы и нет? бс. расположенный внизу, требует дна: 0; он не требует высоты. Если вы установили какой-то умный стиль (display: inline-block; overflow: auto; в UL и float: left; в LI), тогда li должен завернуться в новую строку, как если бы они были словами в абзаце, а ваш ul сохранит высоту жидкости. Вы также можете использовать jQuery для помощи в визуальных вычислениях, добавляя каждый li в UL, пока их общая расчетная ширина меньше ширины ul и соответственно умножает высоту ul. – dmrnj

1

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

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

1

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

< div id = "nav" class = "<?php echo $ nav- > getDisplayClass() ;? > ">

<? PHP Эхо $ nav- > getHTML() ;? >

</дел >

+0

Единственное предостережение - мне не разрешено возиться с классом. –