79 lines
2.3 KiB
PHP
79 lines
2.3 KiB
PHP
<?php
|
|
|
|
use Doctrine\ORM\Query;
|
|
use Gedmo\Translatable\TranslatableListener;
|
|
|
|
$executionStart = microtime(true);
|
|
$memoryStart = memory_get_usage(true);
|
|
|
|
$em = include 'em.php';
|
|
|
|
/**
|
|
* initialized in em.php
|
|
*
|
|
* Gedmo\Translatable\TranslationListener
|
|
*/
|
|
|
|
$repository = $em->getRepository('Entity\Category');
|
|
$food = $repository->findOneByTitle('Food');
|
|
if (!$food) {
|
|
// lets create some categories
|
|
$food = new Entity\Category();
|
|
$food->setTitle('Food');
|
|
$food->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Maistas'));
|
|
|
|
$fruits = new Entity\Category();
|
|
$fruits->setParent($food);
|
|
$fruits->setTitle('Fruits');
|
|
$fruits->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Vaisiai'));
|
|
|
|
$apple = new Entity\Category();
|
|
$apple->setParent($fruits);
|
|
$apple->setTitle('Apple');
|
|
$apple->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Obuolys'));
|
|
|
|
$milk = new Entity\Category();
|
|
$milk->setParent($food);
|
|
$milk->setTitle('Milk');
|
|
$milk->addTranslation(new Entity\CategoryTranslation('lt', 'title', 'Pienas'));
|
|
|
|
$em->persist($food);
|
|
$em->persist($milk);
|
|
$em->persist($fruits);
|
|
$em->persist($apple);
|
|
$em->flush();
|
|
}
|
|
|
|
// create query to fetch tree nodes
|
|
$query = $em
|
|
->createQueryBuilder()
|
|
->select('node')
|
|
->from('Entity\Category', 'node')
|
|
->orderBy('node.root, node.lft', 'ASC')
|
|
->getQuery()
|
|
;
|
|
// set hint to translate nodes
|
|
$query->setHint(
|
|
Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
|
|
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
|
|
);
|
|
$treeDecorationOptions = array(
|
|
'decorate' => true,
|
|
'rootOpen' => '',
|
|
'rootClose' => '',
|
|
'childOpen' => '',
|
|
'childClose' => '',
|
|
'nodeDecorator' => function ($node) {
|
|
return str_repeat('-', $node['level']).$node['title'].PHP_EOL;
|
|
},
|
|
);
|
|
// build tree in english
|
|
echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
|
|
// change locale
|
|
$query->setHint(TranslatableListener::HINT_TRANSLATABLE_LOCALE, 'lt');
|
|
// build tree in lithuanian
|
|
echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
|
|
|
|
$ms = round(microtime(true) - $executionStart, 4) * 1000;
|
|
$mem = round((memory_get_usage(true) - $memoryStart) / 1000000, 2);
|
|
echo "Execution took: {$ms} ms, memory consumed: {$mem} Mb";
|