run.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. use Doctrine\ORM\Query;
  3. use Gedmo\Translatable\TranslationListener;
  4. $executionStart = microtime(true);
  5. $memoryStart = memory_get_usage(true);
  6. $em = include 'em.php';
  7. /**
  8. * initialized in em.php
  9. *
  10. * Gedmo\Translatable\TranslationListener
  11. */
  12. $translatable;
  13. $repository = $em->getRepository('Entity\Category');
  14. $food = $repository->findOneByTitle('Food');
  15. if (!$food) {
  16. // lets create some categories
  17. $food = new Entity\Category;
  18. $food->setTitle('Food');
  19. $fruits = new Entity\Category;
  20. $fruits->setParent($food);
  21. $fruits->setTitle('Fruits');
  22. $apple = new Entity\Category;
  23. $apple->setParent($fruits);
  24. $apple->setTitle('Apple');
  25. $milk = new Entity\Category;
  26. $milk->setParent($food);
  27. $milk->setTitle('Milk');
  28. $em->persist($food);
  29. $em->persist($milk);
  30. $em->persist($fruits);
  31. $em->persist($apple);
  32. $em->flush();
  33. // translate into LT
  34. $translatable->setTranslatableLocale('lt');
  35. $food->setTitle('Maistas');
  36. $fruits->setTitle('Vaisiai');
  37. $apple->setTitle('Obuolys');
  38. $milk->setTitle('Pienas');
  39. $em->persist($food);
  40. $em->persist($milk);
  41. $em->persist($fruits);
  42. $em->persist($apple);
  43. $em->flush();
  44. // set locale back to en
  45. $translatable->setTranslatableLocale('en');
  46. }
  47. // create query to fetch tree nodes
  48. $query = $em
  49. ->createQueryBuilder()
  50. ->select('node')
  51. ->from('Entity\Category', 'node')
  52. ->orderBy('node.root, node.lft', 'ASC')
  53. ->getQuery()
  54. ;
  55. // set hint to translate nodes
  56. $query->setHint(
  57. Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
  58. 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
  59. );
  60. $treeDecorationOptions = array(
  61. 'decorate' => true,
  62. 'rootOpen' => '',
  63. 'rootClose' => '',
  64. 'childOpen' => '',
  65. 'childClose' => '',
  66. 'nodeDecorator' => function($node) {
  67. return str_repeat('-', $node['level']).$node['title'].PHP_EOL;
  68. }
  69. );
  70. // build tree in english
  71. echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
  72. // change locale
  73. $query->setHint(TranslationListener::HINT_TRANSLATABLE_LOCALE, 'lt');
  74. // build tree in lithuanian
  75. echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
  76. $ms = round(microtime(true) - $executionStart, 4) * 1000;
  77. $mem = round((memory_get_usage(true) - $memoryStart) / 1000000, 2);
  78. echo "Execution took: {$ms} ms, memory consumed: {$mem} Mb";