Override the ORM_MTTP::children and ORM_MTPP::descendants methods in

the item model and always pass the orderby fields.  This insures that
all children or descendant calls will respect the album sort order.
This commit is contained in:
Tim Almdal
2009-03-09 14:38:25 +00:00
parent ac82e0a9df
commit b9ee37f30e
3 changed files with 34 additions and 5 deletions
+1 -2
View File
@@ -53,8 +53,7 @@ class Albums_Controller extends Items_Controller {
$template = new Theme_View("page.html", "album");
$template->set_global("page_size", $page_size);
$template->set_global("item", $album);
$template->set_global("children", $album->viewable()->children($page_size, $offset,
array($album->sort_column => $album->sort_order)));
$template->set_global("children", $album->viewable()->children($page_size, $offset));
$template->set_global("children_count", $children_count);
$template->set_global("parents", $album->parents());
$template->content = new View("album.html");
+8 -3
View File
@@ -140,6 +140,7 @@ class ORM_MPTT_Core extends ORM {
* @chainable
* @param integer SQL limit
* @param integer SQL offset
* @param array orderby
* @return array ORM
*/
function children($limit=null, $offset=0, $orderby=null) {
@@ -170,17 +171,21 @@ class ORM_MPTT_Core extends ORM {
* @param integer SQL limit
* @param integer SQL offset
* @param string type to return
* @param array orderby
* @return object ORM_Iterator
*/
function descendants($limit=null, $offset=0, $type=null) {
function descendants($limit=null, $offset=0, $type=null, $orderby=null) {
$this->where("left >", $this->left)
->where("right <=", $this->right);
if ($type) {
$this->where("type", $type);
}
// @todo: make the order column data driven
$this->orderby("id", "ASC");
if (empty($orderby)) {
$this->orderby("id", "ASC");
} else {
$this->orderby($orderby);
}
return $this->find_all($limit, $offset);
}
+25
View File
@@ -353,4 +353,29 @@ class Item_Model extends ORM_MPTT {
url::abs_file("lib/flowplayer-3.0.5.swf") .
"'); </script>";
}
/**
* Return all of the children of this node, ordered by id.
*
* @chainable
* @param integer SQL limit
* @param integer SQL offset
* @return array ORM
*/
function children($limit=null, $offset=0) {
return parent::children($limit, $offset, array($this->sort_column => $this->sort_order));
}
/**
* Return all of the children of the specified type, ordered by id.
*
* @param integer SQL limit
* @param integer SQL offset
* @param string type to return
* @return object ORM_Iterator
*/
function descendants($limit=null, $offset=0, $type=null) {
return parent::descendants($limit, $offset, $type,
array($this->sort_column => $this->sort_order));
}
}