/** * Db tree constructor * * $fields = array( * Varien_Data_Tree_Dbp::ID_FIELD => string, * Varien_Data_Tree_Dbp::PATH_FIELD => string, * Varien_Data_Tree_Dbp::ORDER_FIELD => string * ) * * @param Zend_Db_Adapter_Abstract $connection * @param string $table * @param array $fields */ public function __construct($connection, $table, $fields) { parent::__construct(); if (!$connection) { throw new Exception('Wrong "$connection" parametr'); } $this->_conn = $connection; $this->_table = $table; if (!isset($fields[self::ID_FIELD]) || !isset($fields[self::PATH_FIELD]) || !isset($fields[self::ORDER_FIELD])) { throw new Exception('"$fields" tree configuratin array'); } $this->_idField = $fields[self::ID_FIELD]; $this->_pathField = $fields[self::PATH_FIELD]; $this->_orderField = $fields[self::ORDER_FIELD]; $this->_select = $this->_conn->select(); $this->_select->from($this->_table); }
public function copyTo($parentNode, $prevNode = null) { $this->_tree->copyNodeTo($this, $parentNode, $prevNode); return $this; }
public function removeNode($node) { // For reorder old node branch $dataReorderOld = array($this->_orderField => new Zend_Db_Expr($this->_conn->quoteIdentifier($this->_orderField) . '-1')); $conditionReorderOld = $this->_conn->quoteIdentifier($this->_parentField) . '=' . $node->getData($this->_parentField) . ' AND ' . $this->_conn->quoteIdentifier($this->_orderField) . '>' . $node->getData($this->_orderField); $this->_conn->beginTransaction(); try { $condition = $this->_conn->quoteInto("{$this->_idField}=?", $node->getId()); $this->_conn->delete($this->_table, $condition); // Update old node branch $this->_conn->update($this->_table, $dataReorderOld, $conditionReorderOld); $this->_conn->commit(); } catch (Exception $e) { $this->_conn->rollBack(); throw new Exception('Can\'t remove tree node'); } parent::removeNode($node); return $this; }