Внедрение класса DOM в PHP - PullRequest
0 голосов
/ 12 марта 2010

1001 * Идея * С помощью jQuery я смог пометить все элементы :first-child и :last-child в документе (ну, почти все :)) с классом first, который я мог бы позже оформить (т. Е. Первый li в ul#navigation был бы легко адресуется как ul#navigation .first). Я использовал следующий код: var $f = $('*:first-child') $f.addClass('first'); var $l = $('body *:last-child') $l.addClass('last'); пример

http://jsbin.com/ikuca/3

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

вопрос

Теперь мой вопрос: возможно ли сделать то же самое с помощью php, чтобы пользователи / гаджеты не из JS могли иметь такие же эффекты и дополнительное оформление, а также было бы меньше излишних в браузере.

Итак, можно ли захватить вывод, разобрать его как html и внедрить этот класс легко в php?

осветление

Я вполне осведомлен о output buffering, просто с этим ничего не сделал - также я не уверен насчет модификации вывода string в php как parsed dom ( без regex) - и насколько это будет сложно на сервере - с кэшированием, конечно, поэтому весь этот материал будет запускаться один раз , пока страница не будет отредактирована снова.

Ответы [ 4 ]

3 голосов
/ 12 марта 2010

Я уверен, что вы можете использовать буферизацию вывода для захвата собранной страницы PHP, а затем использовать DOM и XPath на ней, чтобы добавить Атрибуты класса , но вопрос в том, почему бы вам просто не поместить классы в элементы при сборке страницы? Спасает вас jQuery и захват.

Кроме того, добавление классов CSS с помощью jQuery для выполнения ul#navigation.first также несколько странно, потому что используемое вами выражение jQuery является селектором CSS, поэтому вы можете использовать его непосредственно для стилизации первого потомка из вашего файла CSS. , Единственная причина добавить класс .first - если вы хотите иметь обратную совместимость с браузерами, которые не могут обработать :first-child.

0 голосов
/ 30 ноября 2010

Вы даже можете использовать те же самые селекторы CSS , используя некоторые из библиотек, упомянутых здесь .Я читал, что библиотека phpQuery даже имеет такой же :first-child псевдокласс , который вам нужен.

Я искренне надеюсь, что вы планируете использовать кэширование или ваш ЦП увеличится 100% с несколькими запросами.

0 голосов
/ 12 марта 2010

jQuery работает в браузере клиента. PHP работает на сервере. Вы не можете изменить DOM в браузере с сервера после его обслуживания.

Что вы могли бы сделать, это обслуживать страницу уже с соответствующими классами. Например, в PHP при печати таблицы:

<table>
<?php
$i=0;
foreach ($rows as $row):
?>
    <tr class=<?php echo ($i%2==0?'even':'odd')?>
        <td><?php echo $row;</td> 
    </tr>
<?php
endforeach;
?>
</table>

пс. Вы действительно хотите поддерживать клиентов без JS?

0 голосов
/ 12 марта 2010

Я думаю, вам будет проще сделать это в jQuery, чем в PHP, но это можно сделать в PHP.

Для захвата вывода вам нужна буферизация вывода, которую вы активируете с помощью функции ob_start перед отправкой любого вывода. Вы можете передать ob_start() PHP-функцию, которая получит HTML-код в качестве параметра и затем сможет манипулировать HTML-кодом, используя PHP-функции DOM .

...