Harici CSS stil işlemek ve inline CSS unsurları içine enjekte etmek için en iyi yolu nedir?

3 Cevap php

Ben bir PHP e-posta listesi yazı sistemi için gidiyorum. Şablonlar stilleri yönetmek kolay olması için İdeal, ben istiyorum. Benim şimdiki sistemde, tüm bu gibi şablonda kodlanmış stilleri var:

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

Şablonu yönetme kişi, bağlantı metnin rengini değiştirmek istediğinizi karar verene kadar bu iyi çalışıyor. Ne gerçekten istediğiniz bir şey süreç HTML ve stil tanımları ve çıkış, uygun HTML ile HTML sahip olmaktır.

Ne için umut ediyorum aşağıdaki giriş alacak bir şeydir:

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

... Ve üretmek ...

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

Stil güncellenen ise, "render" HTML tüm bu değişiklikleri yansıtacak ... öyle ki.

Bu inline <style></style> etiketleri ile veya harici CSS links ile kullanılabilir eğer çok iyi olurdu.

Benim deneyim ben kullandım webmail bazı (? Tüm? Çoğu) harici veya başka stil bilgileri, onurlandırmak için görünmüyor göstermiştir çünkü ben yapıyorum. Ben burada bir şey cevapsız ettik ve bunu yapmak için daha basit bir yolu var ise, de bu önerileri duymak isterim. :)

EDIT I did some more queries and found another Stackoverflow question that discusses CSS Selectors and I think I will try to use something like phpQuery to handle this.

3 Cevap

I phpQuery ile bu işleme içine bakmaya karar verdi. Ben benim sorununa temiz çözüm sağlar inanıyoruz.

Ben sorunuzu yanlış fark ettikten sonra Update: Ben bu yeniden yazdım.

Her HtmlElement için kodlanmış stilleri içine tüm stil blokları çevirir bir PHP komut dosyasını kod olabilir. Sahte kod olabilir:

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

Bunun için emogrifier kullanıyorum. Bu XPath seçiciler tüm CSS dönüştürür ve daha sonra düğümleri sorgulamak ve stil özelliklerini eklemek için PHP'nin DOMXPath (us.php.net / manuel / tr / class.domxpath.php) kullanır, iyi çalışıyor, ve sonra çıkış CSS ile HTML inlined.

Ben onunla yaşıyorum tek sorun DOMXPath aynı elementin, yani birden çok sınıfları / kimlikleri için seçin seçiciler için oluşturduğu XPath sorguları gibi görünmüyor olmasıdır:

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

hangi üretir

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

hangi görünüşte DOMXPath sevmez. Ama bu seçiciler dışında, büyük iş gibi görünüyor.

Yani XPath öğrenmek ve XPath jeneratör düzeltmek, ya da başka bir XPath jeneratör bulmak, ya da belki de bu PHPQuery şeyi denemek ve dahil edeceğiz ya gerekir.