Created
October 30, 2012 22:11
-
-
Save dpobel/3983418 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use \eZ\Publish\API\Repository\Values\Content\Query; | |
$locationService = $this->getRepository()->getLocationService(); | |
$searchService = $this->getRepository()->getSearchService(); | |
$urlAliasService = $this->getRepository()->getUrlAliasService(); | |
$typeService = $this->getRepository()->getContentTypeService(); | |
$identifiers = array( 'folder', 'page', 'contact' ); | |
$ids = array(); | |
foreach ( $identifiers as $identifier ) | |
{ | |
$ids[] = $typeService->loadByIdentifier( $identifier )->id; | |
} | |
$root = $locationService->loadLocation( 2 ); | |
$query = new Query(); | |
$query->criterion = new Criterion\LogicalAND( | |
array( | |
new Criterion\Subtree( $root->pathString ), | |
new Criterion\ContentTypeId( $ids ), | |
new Criterion\Visibility( Criterion\Visibility::VISIBLE ) | |
) | |
); | |
$query->sortClauses = array( | |
new SortClause\LocationPriority( Query::SORT_DESC ) | |
); | |
$results = $searchService->findContent( $query ); | |
$items = array( ); | |
foreach ( $results->searchHits as $hit ) | |
{ | |
$location = $locationService->loadLocation( | |
$hit->valueObject->contentInfo->mainLocationId | |
); | |
$locationUrl = $urlAliasService->reverseLookup( $location )->path; | |
$items[$locationUrl] = $location; | |
} | |
foreach ( $items as $url => $location ) | |
{ | |
echo "url: {$url} name: {$location->contentInfo->name}\n"; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$items = eZContentObject::subTreeByNodeID( | |
array( | |
'ClassFilterType' => 'include', | |
'ClassFilterArray' => array( 'folder', 'page', 'contact' ), | |
'SortBy' => array( array( 'priority', false ) ) | |
), | |
2 | |
); | |
foreach ( $items as $node ) | |
{ | |
echo "url: {$node->attribute( 'url_alias' )} name: {$node->attribute( 'name' )}\n"; | |
} |
Actually... There is much more code. But it's easier to extend and improves testability thanks to dependency injection. Here, you are building everything in the same script. But it's possible to have a set of defined queries:
$results = $searchService->findContent( new MyArticlesQuery );
or:
$results = $searchService->findContent( new MyConfigurableQuery('articles') );
or:
$results = $searchService->findContent( new MockObjectForTestPurpose );
This was not possible with eZContentObject::subTreeByNodeID()
So... I'm still confident in this new API ;)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Looking at this I think there is a place for a legacy data access layer on top of the new public API. It would decrease the verbosity of the code required to do the retrieval & aid in converting to the new platform.
e.g. Mimic the functionality of eZContentObject::subTreeByNodeID but use the new Public API to do the work.