Каков наилучший способ обработки внешних таблиц стилей CSS и внедрения их во встроенные элементы CSS? - PullRequest
0 голосов
/ 06 апреля 2009

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

<a href="http://blah/blah/blah" style="color: #a8a8a8;">click here</a>

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

То, на что я надеюсь, будет принимать следующие данные:

<style type="text/css">
a {
    color: #a8a8a8;
}
</style>
<a href="http://blah/blah/blah">click here</a>

... и генерировать ...

<a href="http://blah/blah/blah" style="color: #a8a8a8;">click here</a>

... так, что если таблица стилей будет обновлена, «отрендеренный» HTML будет отражать все эти изменения.

Было бы замечательно, если бы это можно было использовать либо со встроенными тегами <style></style>, либо с использованием внешнего CSS links.

Я делаю это, потому что мой опыт показал, что некоторые (большинство? Все?) Из клиентов веб-почты, которые я использовал, по-видимому, не учитывают информацию о стиле, внешнюю или иную. Если я что-то здесь упустил и есть более простой способ сделать это, я бы тоже хотел услышать об этих предложениях. :)

EDIT Я выполнил еще несколько запросов и нашел еще один вопрос Stackoverflow, в котором обсуждаются селекторы CSS , и я думаю, что я попытаюсь использовать что-то вроде phpQuery для этого.

Ответы [ 3 ]

1 голос
/ 01 августа 2009

Для этого я использую emogrifier . Он работает хорошо, он конвертирует все CSS в селекторы XPath, а затем использует PHP DOMXPath (us.php.net/manual/en/class.domxpath.php) для запроса узлов и добавления атрибутов стиля, а затем выводит HTML с CSS встраиваются.

Единственная проблема, с которой я столкнулся, заключается в том, что DOMXPath не похоже на запросы XPath, которые он генерирует для селекторов, которые выбирают несколько классов / идентификаторов для одного и того же элемента, то есть:

#nav_home.current a .ir {
...
}

, который генерирует

//*[@id="nav_home"]*[contains(concat(" ",@class," "),concat(" ","current"," "))]//a//*[contains(concat(" ",@class," "),concat(" ","ir"," "))] 

что DOMXPath явно не нравится. Но, за исключением этих селекторов, кажется, что он отлично работает.

Так что мне нужно либо изучить XPath и починить его генератор XPath, либо найти другой генератор XPath, или, возможно, я попытаюсь также включить этот PHPQuery.

1 голос
/ 06 апреля 2009

Обновление: Я переписал это после того, как понял, что неправильно понял ваш вопрос.

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

1. load up an XML parser for the HTML email generated by your mailing list program
2. xpath get all "style" nodes
3. for each node, parse for the id and/or class of the CSS style (you'll need some regexes for these)
4. for each id and/or class found, look up that node by attribute id or class (using xpath) and append to the existing value of the style attribute
0 голосов
/ 16 мая 2009

Я решил разобраться с этим с помощью phpQuery . Я считаю, что это обеспечивает самое чистое решение моей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...