예제 #1
0
 public function nodes()
 {
     $collection = new NodeCollection();
     $collection->orderBy('updated');
     // add node type
     $collection->joinNodetype();
     $collection->getQuery()->addSelect('nodetype.name AS nodetype_name');
     return (object) ['data' => $collection->toArray()];
 }
예제 #2
0
파일: MenuModel.php 프로젝트: nabble/ajde
 /**
  * @return NodeCollection
  */
 public function getLinks()
 {
     $collection = new NodeCollection();
     $collection->addFilter(new Ajde_Filter_Join('menu', 'menu.node', 'node.id'));
     $collection->addFilter(new Ajde_Filter_Where('menu.parent', Ajde_Filter::FILTER_EQUALS, $this->getPK()));
     $collection->getQuery()->addSelect('menu.name as name');
     $collection->orderBy('menu.sort');
     return $collection;
 }
예제 #3
0
 public function navJson()
 {
     $recursive = true;
     $parent = Ajde::app()->getRequest()->getInt('node', false);
     $nodes = new NodeCollection();
     $nodes->addFilter(new Ajde_Filter_Where('level', Ajde_Filter::FILTER_EQUALS, 0));
     if ($recursive) {
         $nodes->orderBy('sort');
         $json = [];
         foreach ($nodes as $node) {
             /* @var $node NodeModel */
             $nodeArray = ['label' => $this->navLabel($node), 'id' => $node->getPK()];
             $children = $node->getChildren();
             if ($children->count()) {
                 $nodeArray['children'] = $this->navChildrenArray($children);
             }
             $json[] = $nodeArray;
         }
         return $json;
     } else {
         if ($parent) {
             $nodes->addFilter(new Ajde_Filter_Where('parent', Ajde_Filter::FILTER_EQUALS, $parent));
         } else {
             $nodes->addFilter(new Ajde_Filter_Where('level', Ajde_Filter::FILTER_EQUALS, 0));
         }
         $nodes->getQuery()->addSelect('id AS aid');
         $nodes->getQuery()->addSelect('(SELECT count(b.id) FROM node b WHERE b.parent = aid) AS children');
         $nodes->orderBy('sort');
         $json = [];
         foreach ($nodes as $node) {
             /* @var $node NodeModel */
             $children = $node->get('children');
             $json[] = ['label' => $this->navLabel($node), 'id' => $node->getPK(), 'load_on_demand' => $children ? true : false];
         }
         return $json;
     }
 }
예제 #4
0
파일: NodeModel.php 프로젝트: nabble/ajde
 public function getSibling($dir, $loop = true)
 {
     if ($dir == 'next') {
         $filter = Ajde_Filter::FILTER_GREATER;
         $order = Ajde_Query::ORDER_ASC;
     } else {
         $filter = Ajde_Filter::FILTER_LESS;
         $order = Ajde_Query::ORDER_DESC;
     }
     if ($this->has('parent')) {
         $siblings = new NodeCollection();
         $siblings->addFilter(new Ajde_Filter_Where('sort', $filter, $this->sort));
         $siblings->addFilter(new Ajde_Filter_Where('parent', Ajde_Filter::FILTER_EQUALS, (string) $this->get('parent')));
         $siblings->orderBy('sort', $order);
         $siblings->limit(1);
         if ($siblings->count()) {
             return $siblings->current();
         }
     }
     // Not found, loop?
     if ($loop === true) {
         $siblings->reset();
         $siblings->addFilter(new Ajde_Filter_Where('parent', Ajde_Filter::FILTER_EQUALS, (string) $this->get('parent')));
         $siblings->orderBy('sort', $order);
         $siblings->limit(1);
         if ($siblings->count()) {
             return $siblings->current();
         }
     }
     // No sibling
     return false;
 }