CTreeView

Всем привет.

Подскажите могут ли элменты дерева быть ссылками куда ли ?

из коробки как я понял все элементы дерева могут подгружать детей если такие есть.

А было бы здорово если б такая операция вешалась бы на плюсик, а текст ноды представленный в виде ссылки работал сам по себе …

доков крайне мало, из апи видно только то что

$html.="<li{$id}{$css}>{$node['text']}";

а дальше все уже работает на стороне клиента.

Т.е. если я хочу изменить поведение мне нужно лесть в JS ?

и есть ли у кого нить пример как работать с пресист location

Ok. раз никто ничего не пишет, давайте пойдем по другому :)

Есть ли смысл использовать CTreeView для генерации меню каталога ?

Ладно буду дальше тихо сам с собою :)

значит про персисит из исходников плагина стало ясно, что




var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); });


if ( current.length ) {

	current.addClass("selected").parents("ul, li").add( current.next() ).show();

}



заставит плагин пробежатьбся по всем тэгам А (ссылкам) в дереве и если у кого нить в хрефе адрес совпадет с текущим адресом страницы, значит к этому элементу добавится класс selected и заставит родителя "раскрыться"

я прав ?

Я тут говорю об АСИНК(Async) варианте использования данного плагина.

Вопрос как тогда в таком случае нужно генерировать элементы дерева на внутренних страницах каталога ?

К примеру у нас есть дерево




Кат1

Кат2

 Кат2.1

 Кат2.2

Кат3



каждый элемент это ссылка

Проблема 1.

При клике на Кат2 делается Аякс запрос а после выполняется уже <a href=’’> (т.е. переход по ссылке)

Проблему можно решить тем что элементы у которых есть дети будут просто спаны

Но это не решает эту же проблему на конечных элементах дерева (file).

Проблема 2.

При переходе по ссылке (после клика на элементе дерева) дерево генрируется через Аякс

отправляя в Гет root=source, в ответ все получает хорошо, кроме того что тот узел внутри которого мы сейчас находимся отображается закрытым. А элемент дерева соответствующий текущей странице соответственно не видим.

Проблема возможно решается загрузкой всего дерева в массив $data при первом аякс запросе, но тогда теряется смысл последующих аякс запросов.

В общем я понимаю что это больше вопрос по JS но некоторое отношение это все и имеет к Yii.

Не ужели никто не пользовался ?

Пример дерева с ссылками. Не пинай, если не то :-*

Формирование дерева




/**

	 * Создать дерево для представления в CTreeView

	 *

	 * @param array $models

	 */

	private function generateTree($models)

	{

		$data = array();

		

		foreach ($models as $category) {

			$data[$category->id] = array(

				'id'   => $category->id,

				'text' => '<a href="/admin/catalog/category/id/'.$category->id.'">'.$category->category_name.'</a>',

					

			);

				foreach ($category->goods as $item) {

				$data[$category->id]['children'][$item->id] = array(

					'id'   => $item->id,

					'text' =>  '<a href="/admin/catalog/item/id/'.$item->id.'">'.$item->article.'</a>',

					'expanded' => false,

				);

				}

			

		}

		return $data;

	}




А теперь view




<? $this->widget('CTreeView', array('data' => $data,'persist'=>'cookie')); ?>



За пример спасибо.

Но это дерево без аякса, загружаешь ты все дерево целиком сразу. Ну и способ определения активного элемента куки :(

В общем все то что мне не нужно :slight_smile:

Вопрос почти по теме!

Как сделать управление деревом CTreeView в админке, типа:

root

|-категория_1 add|edit|del|down

| |–категория_1.1 add|edit|del|down|up

| |–категория_1.2 add|edit|del|down|up

|-категория_2 add|edit|del|down|up

|–категория_2.1 add|edit|del|down|up

   |---категория_2.1.1 add|edit|del|down|up


   |---категория_2.1.2 add|edit|del|down|up

Использую extensions/nestedset.