#labels Featured,Phase-Implementation Although *phpQuery* is a [http://code.google.com/p/phpquery/wiki/jQueryPortingState jQuery port], there is extensive PHP-specific support. =Table of Contents= * [#Class_Interfaces Class Interfaces] * [#Iterator Iterator Interface] * [#Array_Access ArrayAccess] * [#Countable Countable Interface] * [http://code.google.com/p/phpquery/wiki/Callbacks Callbacks] * [#PHP_Code_Support PHP Code Support] * [#Opening_PHP_files_as_DOM Opening PHP files as DOM] * [#Inputting_PHP_code Inputting PHP code] * [#Outputting_PHP_code Outputting PHP code] ==Class Interfaces== phpQuery implements some of [http://pl.php.net/spl Standard PHP Library (SPL)] interfaces. ====Iterator==== Iterator interface allows looping objects thou native PHP *foreach loop*. Example: {{{ // get all direct LI elements from UL list of class 'im-the-list' $LIs = pq('ul.im-the-list > li'); foreach($LIs as $li) { pq($li)->addClass('foreached'); } }}} Now there is a catch above. Foreach loop *doesn't return phpQuery object*. Instead it returns pure DOMNode. That's how jQuery does, because not always you need *phpQuery* when you found interesting nodes. ====Array Access==== If you like writing arrays, with phpQuery you can still do it, thanks to the ArrayAccess interface. {{{ $pq = phpQuery::newDocumentFile('somefile.html'); // print first list outer HTML print $pq['ul:first']; // change INNER HTML of second LI directly in first UL $pq['ul:first > li:eq(1)'] = 'new inner html of second LI directly in first UL'; // now look at the difference (outer vs inner) print $pq['ul:first > li:eq(1)']; // will print
  • new inner html of second LI directly in first UL
  • }}} ====Countable==== If used to do `count($something)` you can still do this that way, instead of eg `pq('p')->size()`. {{{ // count all direct LIs in first list print count(pq('ul:first > li')); }}} ==Callbacks== There is a special [http://code.google.com/p/phpquery/wiki/Callbacks Callbacks] wiki section, to which you should refer to. ==PHP Code Support== ====Opening PHP files as DOM==== PHP files can be opened using *phpQuery::newDocumentPHP($markup)* or *phpQuery::newDocumentFilePHP($file)*. Such files are visible as DOM, where: * PHP tags beetween DOM elements are available (queryable) as ` ...code... ` * PHP tags inside attributes are HTML entities * PHP tags between DOM element's attributes are *not yet supported* ====Inputting PHP code==== Additional methods allows placing PHP code inside DOM. Below each method visible is it's logic equivalent. * *attrPHP*($attr, $code) * [http://docs.jquery.com/Attributes/attr attr]($attr, "") * *addClassPHP*($code) * [http://docs.jquery.com/Attributes/addClass addClass]("") * *beforePHP*($code) * [http://docs.jquery.com/Manipulation/before before]("") * *afterPHP*($code) * [http://docs.jquery.com/Manipulation/after after]("") * *prependPHP*($code) * [http://docs.jquery.com/Manipulation/prepend prepend]("") * *appendPHP*($code) * [http://docs.jquery.com/Manipulation/append append]("") * *php*($code) * [http://docs.jquery.com/Manipulation/html html]("") * *wrapAllPHP*($codeBefore, $codeAfter) * [http://docs.jquery.com/Manipulation/wrapAll wrapAll]("") * *wrapPHP*($codeBefore, $codeAfter) * [http://docs.jquery.com/Manipulation/wrap wrap]("") * *wrapInnerPHP*($codeBefore, $codeAfter) * [http://docs.jquery.com/Manipulation/wrapInner wrapInner]("") * *replaceWithPHP*($code) * [http://docs.jquery.com/Manipulation/replaceWith replaceWith]("") ====Outputting PHP code==== Code inserted with methods above won't be returned as valid (runnable) using classic output methods such as *html()*. To make it work, *php()* method without parameter have to be used. Optionaly *phpQuery::markupToPHP($markup)* can activate tags in string outputed before. *REMEMBER* Outputing runnable code and placing it on webserver is always dangerous !