-
Notifications
You must be signed in to change notification settings - Fork 66
PHPSupport
Although phpQuery is a jQuery port, there is extensive PHP-specific support.
phpQuery implements some of Standard PHP Library (SPL) interfaces.
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.
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 <li>new inner html of second LI directly in first UL</li>
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'));
There is a special Callbacks wiki section, to which you should refer to.
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
<php> ...code... </php>
- PHP tags inside attributes are HTML entities
- PHP tags between DOM element's attributes are not yet supported
Additional methods allows placing PHP code inside DOM. Below each method visible is it's logic equivalent.
-
attrPHP($attr, $code)
- attr($attr, "")
-
addClassPHP($code)
- addClass("")
-
beforePHP($code)
- before("")
-
afterPHP($code)
- after("")
-
prependPHP($code)
- prepend("")
-
appendPHP($code)
- append("")
-
php($code)
- html("")
-
wrapAllPHP($codeBefore, $codeAfter)
- wrapAll("")
-
wrapPHP($codeBefore, $codeAfter)
- wrap("")
-
wrapInnerPHP($codeBefore, $codeAfter)
- wrapInner("")
-
replaceWithPHP($code)
- replaceWith("")
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 !