浏览代码

[example] update example code and document steps

gedi 13 年之前
父节点
当前提交
a769e7b865
共有 3 个文件被更改,包括 37 次插入20 次删除
  1. 2 0
      doc/annotations.md
  2. 5 0
      example/em.php
  3. 30 20
      example/run.php

+ 2 - 0
doc/annotations.md

@@ -67,6 +67,8 @@ New annotation reader does not depend on any namespaces, for that reason you can
 single reader instance for whole project. The example bellow shows how to setup the
 mapping and listeners:
 
+**Note:** using this repository you can test and check the [example demo configuration](https://github.com/l3pp4rd/DoctrineExtensions/blob/master/example/em.php)
+
 ``` php
 $reader = new \Doctrine\Common\Annotations\AnnotationReader();
 $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader);

+ 5 - 0
example/em.php

@@ -1,4 +1,9 @@
 <?php
+/**
+ * This entity manager configuration works with doctrine 2.1.x and 2.2.x
+ * versions. Regarding AnnotationDriver setup it most probably will be changed into
+ * xml. Because annotation driver fails to read other classes in same namespace
+ */
 // connection args, modify at will
 $connection = array(
     'host' => '127.0.0.1',

+ 30 - 20
example/run.php

@@ -1,5 +1,8 @@
 <?php
 
+use Doctrine\ORM\Query;
+use Gedmo\Translatable\TranslationListener;
+
 $executionStart = microtime(true);
 $memoryStart = memory_get_usage(true);
 
@@ -53,28 +56,35 @@ if (!$food) {
     $translatable->setTranslatableLocale('en');
 }
 
-// builds tree
-$build = function ($nodes) use (&$build, $repository) {
-    $result = '';
-    foreach ($nodes as $node) {
-        $result .= str_repeat("-", $node->getLevel())
-            . $node->getTitle()
-            . '('.$node->getSlug().')'
-            . PHP_EOL
-        ;
-        if ($repository->childCount($node, false)) {
-            $result .= $build($repository->children($node, true));
-        }
+// 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;
     }
-    return $result;
-};
-
-$nodes = $repository->getRootNodes();
-echo $build($nodes).PHP_EOL.PHP_EOL;
+);
+// build tree in english
+echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
 // change locale
-$translatable->setTranslatableLocale('lt');
-$nodes = $repository->getRootNodes(); // reload in diferent locale
-echo $build($nodes).PHP_EOL.PHP_EOL;
+$query->setHint(TranslationListener::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);