Nested Sets + CTreeView, CDropdownList, CListBox
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Timlar,
Не пробовал автору отправить исправленный вариант, чтобы народ не мучался?
Не пробовал автору отправить исправленный вариант, чтобы народ не мучался?
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 5
- Зарегистрирован: 2010.05.06, 22:19
- Откуда: Lutsk, Ukraine
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Это пока-что не форк... Пока ты или автор не решили сделать пару улучшений =)Timlar писал(а):Это не форк Там всего лишь исправлены ошибки для работы с новыми версиями фреймворка.
Кстати, отправить автору новый вариант было бы хорошо, или сделать официальный форк и самому его поддерживать, хотя первый вариант получше в данном случае.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Если бы автор был заинтересован, он сам давно исправил бы. Лично мне не хочется этим заниматься. Да и в разговорном английском я не силен Могу только на русский переводить и все Если у кого-то есть желание пообщаться с автором - пообщайтесь.
Twitter: @timlar_ua
-
- Сообщения: 5
- Зарегистрирован: 2010.05.06, 22:19
- Откуда: Lutsk, Ukraine
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Со временем надо будет перелопатить код этого екстеншена ибо код плохо читаемый (как по мне), не стандартизирован, и т. д. А кода там есть так немного =)
-
- Сообщения: 107
- Зарегистрирован: 2010.03.17, 12:54
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Подскажите пожалуйста как из этих данных сделать вывод в массив, понятный для CMENU ?
Код: Выделить всё
$items=array(
array('label'=>'Home', 'url'=>array('/')),
array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
array('label'=>'Contact', 'url'=>array('/site/contact'),'items'=>array(
array('label'=>'Home', 'url'=>array('/'))
)),
)
Вот, что можно сделать с помощью Yii - Teutonick.ru
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Код: Выделить всё
<?php
class ArrayTreeBehavior extends TreeBehavior {
public function getCMenuArray ($param = array()) {
if (isset($param['rootaslink'])) {
$rootaslink = $param['rootaslink'];
} else {
$rootaslink = false;
}
if (isset($param['returnrootnode'])) {
$returnrootnode = $param['returnrootnode'];
} else {
$returnrootnode = false;
}
if (isset($param['keyfield'])) {
$keyfield = $param['keyfield'];
} else {
$keyfield = '_id';
}
// Fetch the flat tree
$rawtree = $this->getTree($returnrootnode);
// Init variables needed for the array conversion
$tree = array();
$node =& $tree;
$position = array();
$lastitem = '';
$depth = $this->getLevelValue();
foreach($rawtree as $rawitem)
{
// If its a deeper item, then make it subitems of the current item
if ($rawitem->getLevelValue() > $depth)
{
$position[] =& $node; //$lastitem;
$depth = $rawitem->getLevelValue();
$node =& $node[$lastitem]['items'];
}
// If its less deep item, then return to a level up
else
{
while ($rawitem->getLevelValue() < $depth)
{
end($position);
$node =& $position[key($position)];
array_pop($position);
$depth = $node[key($node)]['node']->getLevelValue();
}
}
// Add the item to the final array
$node[$rawitem->$keyfield]['node'] = $rawitem;
if(!$rawitem->hasChildNodes() || $rootaslink)
$node[$rawitem->$keyfield]['url'] = array($rawitem->owner->_url);
$node[$rawitem->$keyfield]['label'] = $rawitem->owner->_name;
// save the last items' name
$lastitem = $rawitem->$keyfield;
}
// we don't care about the root node
if (!$returnrootnode)
{
reset($tree);
$tree = $tree[key($tree)]['items'];
//array_shift($tree);
}
return $tree;
}
}
Код: Выделить всё
public function behaviors(){
return array(
'TreeBehavior' => array(
'class' => 'application.extensions.nestedset.TreeBehavior',
),
'ArrayTreeBehavior' => array(
'class' => 'application.extensions.nestedset.ArrayTreeBehavior',
),
);
Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items'=>$root->getCMenuArray(array(
'returnrootnode'=>true,
)),
));
Короче присмотритесь к куску кода:
Код: Выделить всё
class ArrayTreeBehavior extends TreeBehavior {
public function getCMenuArray ($param = array()) {
.................................
// Add the item to the final array
$node[$rawitem->$keyfield]['node'] = $rawitem;
if(!$rawitem->hasChildNodes() || $rootaslink)
$node[$rawitem->$keyfield]['url'] = array($rawitem->owner->_url);
$node[$rawitem->$keyfield]['label'] = $rawitem->owner->_name;
// save the last items' name
$lastitem = $rawitem->$keyfield;
....................
}
}
-
- Сообщения: 107
- Зарегистрирован: 2010.03.17, 12:54
Re: Nested Sets + CTreeView, CDropdownList, CListBox
вот это спасибо! буду кумекать!
Вот, что можно сделать с помощью Yii - Teutonick.ru
Re: Nested Sets + CTreeView, CDropdownList, CListBox
А можно ли отсортировать узлы деревьев? По определенному параметру. Допустим у меня есть дерево
2
-2
-1
1
-2
--2
--1
-1
А я хочу получить:
1
-1
-2
--1
--2
2
-1
-2
2
-2
-1
1
-2
--2
--1
-1
А я хочу получить:
1
-1
-2
--1
--2
2
-1
-2
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
-
- Сообщения: 107
- Зарегистрирован: 2010.03.17, 12:54
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Все что поддается сортировки описано тут
http://www.getinfo.ru/article610.html
http://www.getinfo.ru/article610.html
Вот, что можно сделать с помощью Yii - Teutonick.ru
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Мне подойдет сортировка только для отображения дерева, в самой базе ничего менять не нужно)
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Можете подсказать где искать решение проблемы. Я подключаю виджет:
Но он отображается как обычный список <ul>, я проверил файл css <link rel="stylesheet" type="text/css" href="/css/treeview/jquery.treeview.css" /> подключается. Может быть проблема в том, что список генерируется вот так:
А должно быть так (посмотрел в другом проекте, в котором все работает):
Но почему не добавляется класс, и как его добавить самому я понять не могу
Код: Выделить всё
<?php $this->widget('application.modules.catalog.components.Tree'); ?>
Код: Выделить всё
<ul id="yw0">
<li id="node4"><a href="/admin/product/category/id4">1</a></li>
<li id="node5"><a href="/admin/product/category/id5">2</a></li>
<li id="node6"><a href="/admin/product/category/id6">3</a></li>
<li id="node7"><a href="/admin/product/category/id7">4</a></li>
</ul>
Код: Выделить всё
<ul id="yw0" class="treeview">
<li id="node4"><a href="/admin/product/category/id4">1</a></li>
<li id="node5"><a href="/admin/product/category/id5">2</a></li>
<li id="node6"><a href="/admin/product/category/id6">3</a></li>
<li id="node7"><a href="/admin/product/category/id7">4</a></li>
</ul>
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Это указывается в компоненте (виджете) в свойстве htmlOptions:
Код: Выделить всё
<?php
$this->widget('CTreeView', array(
'data'=>$tree,
'animated'=>'medium',
'collapsed'=>true,
'persist'=>'mixed',
'unique'=>true,
'cssFile'=>'/css/treeview/jquery.treeview.css',
'htmlOptions'=>array('id'=>'tree','class'=>'treeview'),
));
?>
Twitter: @timlar_ua
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Спасибо, помогло
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Я подключил ваше расширение в модуль... Не могу вылечить ошибку
Что делать? Как с путями разобраться?
Код: Выделить всё
YiiBase::include(CNestedSetBehavior.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Проблема описана в тексте ошибки: No such file or directory - Не существует файл или директория. Т.е. фреймворк не может найти указанный файл. Возможно, где-то ошибка в путях при подключении расширения.
Twitter: @timlar_ua
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Дело в том, что файл "TreeViewTreebehavior.php" находит и подключает... А дальше уже "CNestedSetBehavior.php" не находит
Может че и наковыряю)
Может че и наковыряю)
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Решение моей проблемы...
В файле "TreeBehavior.php" в начале я добавил строчку:
теперь Yii не ругается
правильно ли я поступил?
--------
ВСЕ РАБОТАЕТ!
В файле "TreeBehavior.php" в начале я добавил строчку:
Код: Выделить всё
include dirname(__FILE__).'/'.'CNestedSetBehavior.php';
правильно ли я поступил?
--------
ВСЕ РАБОТАЕТ!
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Небольшое замечание
Лучше вместо
написать
а также вместо проверок типа
делать
Так как у меня на максимальных настройках вывода ошибок Yii валится с ошибками.
Лучше вместо
Код: Выделить всё
if($_POST['tree'] == 'manage') {
Код: Выделить всё
if(isset($_POST['tree']) && $_POST['tree'] == 'manage') {
Код: Выделить всё
if($_POST['add']) {
Код: Выделить всё
if(isset($_POST['add'])) {
Yii Jabber Conference: yii@conference.jabber.ru
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
А еще лучше делать проверку строк тремя равно "===", ибо с двумя можно нарваться на багу.
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Nested Sets + CTreeView, CDropdownList, CListBox
Если проверять на ===, то перед этим все переменные нужно приводить ручками к нужному типу, т.к. пхп как хочет так и ставит тип.
Предупрежден - значит вооружен.
devKP.ru
devKP.ru