styleroom
(Styleroom)
December 6, 2013, 7:57am
1
всем привет
озадачился созданием своих gii-генераторов и не понял: откуда берутся ссылки на генераторы? ну, те что слева
и как туда добавить ссылки на свои генераторы?
p.s.картинку-поясняшку прикрепил ибо вставка картинок запрещена: You are not allowed to use that image extension on this board.
Charger
(Charger)
December 6, 2013, 8:00am
2
А вы читали "The Definitive Guide to Yii"? Там же есть страница по Gii, и о том как создавать свои генераторы.
styleroom
(Styleroom)
December 6, 2013, 8:16am
3
но меня интересует вопрос - как ссылки на них в меню слева создать
а не как создавать генераторы
p.s. это тьюториале есть ?
Charger
(Charger)
December 6, 2013, 8:39am
4
Создаете генератор, появляется ссылка. Если путь к новому генератору правильно прописан в конфиге.
styleroom
(Styleroom)
December 6, 2013, 8:52am
5
ааааа! а чтобы ссылка называлась "мой крутой генератор CRUD" - чего надо сделать?
Charger
(Charger)
December 6, 2013, 11:27am
6
Наверное
class МойКрутойГенераторCRUD extends ...
Но зачем это вам, в общем-то?
styleroom
(Styleroom)
December 6, 2013, 11:29am
7
ну вот именно про это я и спрашивал!
то есть текст ссылки в меню будет результатом парсинга движком Юй определенных директорий
так ведь получается?
Charger
(Charger)
December 6, 2013, 11:45am
8
Не уверен, посмотрите исходники
styleroom
(Styleroom)
December 6, 2013, 11:48am
9
да не…
я скорее пойду по пути создания своих шаблонов рядом с дефолтными…
это куда проще, а результат тот-же
и при генерации кода просто буду выбирать свой шаблон и усе у поряде!
ineersa
(Ineersa)
December 6, 2013, 12:16pm
10
Там же все черным по белому
<?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;
}
ineersa
(Ineersa)
December 6, 2013, 12:33pm
11
На самом деле же все понятно, в конфиге указываем
'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);
styleroom
(Styleroom)
December 9, 2013, 4:48am
12
ineersa:
На самом деле же все понятно, в конфиге указываем
'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?
ineersa
(Ineersa)
December 9, 2013, 10:20am
13
Да сгенерить можно все что угодно.