method to sort a tree node even with empty parents


/ Published in: PHP
Save to your folder(s)



Copy this code and paste it in your HTML
  1. function admin_reorder( $id = false ) {
  2.  
  3. $this->autoRender = false;
  4.  
  5. // obtengo el parent para ordenar por el
  6. $itemParent = $this->Category->getparentnode( $id );
  7.  
  8. // si el contenido tiene un padre...
  9. if ( !empty( $itemParent['Category']['id'] ) ) :
  10.  
  11. # CakeLog::write('debug', 'Ordenando un nodo de nivel > 0');
  12.  
  13. // ordeno el padre
  14. $this->Category->reorder( array( 'id' => $itemParent['Category']['id'], 'field' => 'order_by', 'order' => 'ASC' ) );
  15.  
  16. else:
  17.  
  18. # CakeLog::write('debug', 'Ordenando un nodo de nivel = 0');
  19.  
  20. // si no tiene padre traigo todos los contenidos sin padre y los ordeno
  21. $nodes = $this->Category->find('all', array( 'conditions' => array(
  22. 'OR' => array(
  23. 'Category.parent_id' => 0,
  24. 'Category.parent_id IS NULL'
  25. )
  26. ), 'order' => 'Category.order_by ASC' ) ); //pr( $nodes );
  27.  
  28. // va tomando nodo por nodo y lo pone al final del arbol
  29. if ( $nodes ) {
  30. foreach ( $nodes as $node ) {
  31. $this->Category->moveDown( $node['Category']['id'], true);
  32. }
  33. }
  34.  
  35. // si encuentra un error intenta recuperar el el arbol
  36. if ( !$this->Category->verify() ) :
  37. CakeLog::write('debug', 'Error al ordenar arbol de categorías con el ID: ' . $id . '. Intentando recuperar...');
  38. $this->Category->recover('parent');
  39. endif;
  40.  
  41. endif;
  42.  
  43. $this->redirect('index');
  44.  
  45. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.