Unlike most of our plugins, pkToolkitPlugin is a bit of a kitchen
sink. It contains a lot of utility classes, some more experimental
things, and not a lot of documentation. So it's easy to miss the great
stuff that lives there.

Better documentation is coming as various items in that plugin mature.
But I'd like to share two particularly useful and stable features that
folks probably don't realize are there:

* The pkToolkit:ssh task. This is a convenient way to open up an
interactive ssh connection to any staging or production server
configured in properties.ini. Just type:

./symfony pkToolkit:ssh staging

You'll be prompted for the password of the staging site. When the
connection is made, the script automatically changes directory to the
project's directory, which is almost always the next thing you'd do
anyway. And then it becomes a normal interactive shell.

Note that the 'expect' utility must be installed on your computer for
this to work, and it probably won't work on a Windows host. Macs come
with expect, and it is an easily installed package on Linux.

* The pkHtml class. Many projects allow users to edit content via a
rich text editor. And we all know what happens if the user pastes a
Word document in there: the styles of the page wind up hopelessly
munged. You can use striptags(), but that doesn't clean up the CSS, so
your page is still a mess.

A common workaround is to use FCK's "paste as plaintext" mode, which
thwarts attempts to paste rich text from another program. That works,
after a fashion, but it's frustrating for users. And none of the
workarounds help if the user is actively trying to enter inappropriate
HTML in a misguided attempt to re-style their site... then calling you
to fix it for the 500th time.

HTML Tidy can do the job, but it has a reputation for being heavy and slow.

Or... you can just use pkHtml::simplify():

pkHtml::simplify($richTextHTML,
"<h3><h4><h5><h6><blockquote><p><a><ul><ol><nl><li><b><i><strong><em><strike><code><hr><br><div><table><thead><caption><tbody><tr><th><td>");

If that looks a lot like the arguments to striptags(), you're right.
But pkHtml::simplify() follows up striptags() with a DOMDocument-based
filter that removes attributes too, except for the attributes that
actually make sense to permit for certain tags. Currently this is:

A tag -> href and name attributes
img tag -> src attribute

You don't have to use pkHtml::simplify() manually, either. Instead,
you can use the sfValidatorHtml validator, also found in pkToolkit,
which allows the above list of tags by default because they are
well-suited to user-entered content (you can change that).

pkHtml is much more lightweight than Tidy. On one project we needed to
separately clean hundreds of potential HTML containers in a single XML
document, in real time, before presenting some of that information to
the user. pkHtml::simplify turns that around very quickly indeed.

Our pkContextCMSPlugin takes advantage of pkHtml::simplify() to allow
rich text editing without the constant "oops I screwed up my site"
issues that come up without a robust server-side filter.

For convenience we also package Dominic Schierlinck's
sfWidgetFormRichTextarea widget. It's meant to be compatible with both
MCE and FCK, although we always use FCK.

-- 
Tom Boutell
P'unk Avenue
215 755 1330
punkave.com
window.punkave.com

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to