Ссылки На Свои Генераторы Gii

всем привет

озадачился созданием своих gii-генераторов и не понял: откуда берутся ссылки на генераторы? ну, те что слева

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

p.s.картинку-поясняшку прикрепил ибо вставка картинок запрещена: You are not allowed to use that image extension on this board.

А вы читали "The Definitive Guide to Yii"? Там же есть страница по Gii, и о том как создавать свои генераторы.

но меня интересует вопрос - как ссылки на них в меню слева создать

а не как создавать генераторы

p.s. это тьюториале есть ?

Создаете генератор, появляется ссылка. Если путь к новому генератору правильно прописан в конфиге.

ааааа! а чтобы ссылка называлась "мой крутой генератор CRUD" - чего надо сделать?

Наверное




class МойКрутойГенераторCRUD extends ...



Но зачем это вам, в общем-то?

ну вот именно про это я и спрашивал!

то есть текст ссылки в меню будет результатом парсинга движком Юй определенных директорий

так ведь получается?

Не уверен, посмотрите исходники :)

да не…

я скорее пойду по пути создания своих шаблонов рядом с дефолтными…

это куда проще, а результат тот-же

и при генерации кода просто буду выбирать свой шаблон и усе у поряде!

Там же все черным по белому :rolleyes:




<?php $this->beginWidget('zii.widgets.CPortlet', array(

			'title'=>'Generators',

		)); ?>

			<ul>

				<?php foreach($this->module->controllerMap as $name=>$config): ?>

				<li><?php echo CHtml::link(ucwords(CHtml::encode($name).' generator'),array($name.'/index'));?></li>

				<?php endforeach; ?>

			</ul>

		<?php $this->endWidget(); ?>



Собственно controllerMap




//GiiModule init

$this->generatorPaths[]='gii.generators';

$this->controllerMap=$this->findGenerators();



Ну и собственно формирование массива для controllerMap




protected function findGenerators()

	{

		$generators=array();

		$n=count($this->generatorPaths);

		for($i=$n-1;$i>=0;--$i)

		{

			$alias=$this->generatorPaths[$i];

			$path=Yii::getPathOfAlias($alias);

			if($path===false || !is_dir($path))

				continue;


			$names=scandir($path);

			foreach($names as $name)

			{

				if($name[0]!=='.' && is_dir($path.'/'.$name))

				{

					$className=ucfirst($name).'Generator';

					if(is_file("$path/$name/$className.php"))

					{

						$generators[$name]=array(

							'class'=>"$alias.$name.$className",

						);

					}


					if(isset($generators[$name]) && is_dir("$path/$name/templates"))

					{

						$templatePath="$path/$name/templates";

						$dirs=scandir($templatePath);

						foreach($dirs as $dir)

						{

							if($dir[0]!=='.' && is_dir($templatePath.'/'.$dir))

								$generators[$name]['templates'][$dir]=strtr($templatePath.'/'.$dir,array('/'=>DIRECTORY_SEPARATOR,'\\'=>DIRECTORY_SEPARATOR));

						}

					}

				}

			}

		}

		return $generators;

	}



На самом деле же все понятно, в конфиге указываем




'generatorPaths'=>array(

                'common.gii',   

            ),



Это и есть алиас пути, далее gii берет массив generatorPaths и добавляет дефолтные. Потом папки подходящие под алиас парсятся и добавляются в controllerMap.

Тоесть в папку которую определили и ложите ваши генераторы




/common/gii

   ---myfirstgenerator

      ---templates

      ---views

      ---MyfirstgeneratorGenerator.php

   ---mysecond

      ---templates

      ---views

      ---MysecondGenerator.php



Зря вы боитесь лезть в сорсы, много полезного можно узнать.

P.S.




if($name[0]!=='.' && is_dir($path.'/'.$name))



не совсем красиво, и не учитывает "…", всегда делаю




$names=scandir($path);

array_shift($names);

array_shift($names);



мега-спасибо!

попробовал = все получилось!

p.s. я так понимаю, что сгенерить можно абсолютно любой код? даже javascript и css?

Да сгенерить можно все что угодно. :)