Home Joomla Статьи Статьи о Joomla Модуль Joomla в один клик
Модуль Joomla в один клик PDF Печать E-mail
Автор: А.Волос   
27.09.2013 06:06

Для того, чтобы создать новый модуль в Joomla, необходимо создать для него дерево каталогов и файлов. При этом в файлах и каталогах должны соблюдаться определенные правила именования каталогов, файлов и переменных.

Всю эту рутинную работу можно сделать вручную, если необходимо создать дерево для одного или двух модулей, но если модулей надо создать пять или более?

 

 

Ниже показанная утилита избавит программиста от рутинной, скучной работы по созданию дерева файлов для модуля меню Joomla. Достаточно поместить файлы программы на локальный сервер и запустить в браузере файл index.php. Далее ввести в текстовое поле имя нового модуля и нажать 'Выполнить'.

Будет создан каталог mod_ИмяМодуля. В этом каталоге будут находиться все необходимые новому модулю файлы.

Далее делаем из полученного каталога mod_ИмяМодуля zip-архив, и устанавливаем обычным порядком, каким устанавливаются все расширения в Joomla.

Файл index.php

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
</head>
<body>
	<form id="myForm" method="POST" action="Listing_05.php">
		Введите имя для нового модуля:

		<input name="mod_name" type="text" value="" size="20">


		<input type="submit" value="Выполнить">
	</form>
</body>
</html>
 

Listing_05.php

 

<?php
function full_copy($source, $target) {
  if (is_dir($source))  {
    @mkdir($target);
    $d = dir($source);
    while (FALSE !== ($entry = $d->read())) {
      if ($entry == '.' || $entry == '..') continue;
      full_copy("$source/$entry", "$target/$entry");
    }
    $d->close();
  }
  else copy($source, $target);
}

function removeDirRec($dir)
{
    if ($objs = glob($dir."/*")) {
        foreach($objs as $obj) {
            is_dir($obj) ? removeDirRec($obj) : unlink($obj);
        }
    }
}

function removeDirRec2($dir)
{
    if ($objs = glob($dir."/*")) {
        foreach($objs as $obj) {
			if(is_dir($obj)){//если это каталог
				removeDirRec2($obj);
				rmdir($obj);
			}
			else{
				unlink($obj);
			}	
        }
    }
}

//Очистим каталог to1
removeDirRec2("to1");

//получим имя текущего каталога
$current_dir = getcwd();

//просканируем текущий каталог
$dir_name = scandir($current_dir);

//print_r($dir_name);

foreach($dir_name as $name){
	if(is_dir($name)){//если это каталог
		//echo "Каталог $name 
";
		$pos = strpos($name, "mod_");

		// Заметьте, что используется ===.  Использование == не даст верного 
		// результата, так как 'a' в нулевой позиции.
		if ($pos === false) {
			//echo "Строка 'mod_' не найдена в строке '$name'";
		} else {
			//echo "Строка 'mod_' найдена в строке '$name'";
			//echo " в позиции $pos";
			//имя каталога найдено, удалим этот каталог
			removeDirRec2($name);//сначала очистим каталог
			rmdir($name);//теперь удалим пустой каталог
		}		
	}
}

//die();

$mod_name = $_POST['mod_name']; 
$mod_name = trim($mod_name);

//Переведем в нижний регистр
$str_lower = strtolower($mod_name);

//Переведем в верхний регистр
$str_upper = strtoupper($mod_name);

//объявим массивы
$masNameFrom = array();
$masNameTo = array();

$target = "mymodule01"; 
$target2 = "MYMODULE01"; 
$replacement = $str_lower;
$replacement2 = $str_upper;

//-----------------------------
// откроем файл для записи ошибок
$filename = "error.txt";
if(!($myFile = fopen($filename, "w"))) {
print("Error: ");
print("'$filename' could not be created\n");
exit;
}
//-----------------------------
// open directory

$masNameFrom = scandir("from1");
$myDirectoryFrom = opendir("from1");

//определим количество элементов в массиве
$indexLimit = count($masNameFrom);

//======================================
//Сейчас в массиве $masNameFrom[] имена каталогов Gl_01 и тд
//======================================
// для каждого имени каталога повторим цикл
for($ind_ex=2; $ind_ex < $indexLimit; $ind_ex++) {
//-----------------------------
// open directory

$t_bool = mkdir("to1/".$masNameFrom[$ind_ex]);
$masNameFrom2 = scandir("from1/".$masNameFrom[$ind_ex]);
$myDirectoryFrom2 = opendir("from1/".$masNameFrom[$ind_ex]);

//определим количество элементов в массиве
$indexLimit2 = count($masNameFrom2);

//======================================
//Сейчас в массиве $masNameFrom2[] имена файлов Gl_01_01.html и тд
//======================================
// для каждого имени каталога повторим цикл
for($index=2; $index < $indexLimit2; $index++) {

//---------------------------
// откроем файл для чтения
$filenameFrom = "from1/".$masNameFrom[$ind_ex]."/".$masNameFrom2[$index];
if(!($myFileFrom = fopen($filenameFrom, "r"))) {
fputs($myFile, "'$myFileFrom' could not be opened\n" );
exit;
}
//---------------------------
//откроем файл для записи
$filenameTo = "to1/".$masNameFrom[$ind_ex]."/".$masNameFrom2[$index];
if(!($myFileTo = fopen($filenameTo, "w"))) {
fputs($myFile, "'$filenameTo' could not be created\n" );
exit;
}
//---------------------------
//считаем построчно из файла from в файл to
while(!feof($myFileFrom)) {

    //читаем строку из файла 
    $myLine = fgets($myFileFrom, 1024); 
    $myNewLine  = str_replace($target,$replacement,$myLine);
    $myNewLine2 = str_replace($target2,$replacement2,$myNewLine);
    fputs($myFileTo, "$myNewLine2");

}

// закроем файлы
fclose($myFileFrom);
fclose($myFileTo);

}//end for
//======================================
closedir($myDirectoryFrom2);

}//end for
//======================================
closedir($myDirectoryFrom);

fclose($myFile);
//--------------------------------
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////


$prim = "mymodule01";
$temp = $str_lower;

//создаем новые каталоги
mkdir("mod_$temp",0755);
mkdir("mod_".$temp."/language");
mkdir("mod_".$temp."/language/en-GB");
mkdir("mod_".$temp."/language/ru-RU");
mkdir("mod_".$temp."/images");
mkdir("mod_".$temp."/css");
mkdir("mod_".$temp."/js");

//перемещаем файлы с переименованием в новые каталоги
rename("to1/en-GB/en-GB.mod_".$prim.".ini", "mod_".$temp."/language/en-GB/en-GB.mod_".$temp.".ini");
rename("to1/en-GB/en-GB.mod_".$prim.".sys.ini", "mod_".$temp."/language/en-GB/en-GB.mod_".$temp.".sys.ini");
rename("to1/ru-RU/ru-RU.mod_".$prim.".ini", "mod_".$temp."/language/ru-RU/ru-RU.mod_".$temp.".ini");
rename("to1/ru-RU/ru-RU.mod_".$prim.".sys.ini", "mod_".$temp."/language/ru-RU/ru-RU.mod_".$temp.".sys.ini");
rename("to1/02/mod_".$prim.".php", "mod_$temp/mod_".$temp.".php");
rename("to1/02/mod_".$prim.".xml", "mod_$temp/mod_".$temp.".xml");

//копируем каталоги
full_copy("to1/images","mod_$temp/images");
full_copy("to1/css","mod_$temp/css");
full_copy("to1/js","mod_$temp/js");
full_copy("to1/tmpl","mod_$temp/tmpl");
//копируем файлы
full_copy("to1/en-GB/index.html","mod_$temp/language/index.html");
full_copy("to1/02/helper.php","mod_$temp/helper.php");
full_copy("to1/en-GB/index.html","mod_$temp/index.html");

?>

<a style="cursor:pointer; width:50px; height:30px; margin:5px; float:left; background:yellow; " onclick="window.history.go(-1)" >Назад</a>



 
<?php echo "Модуль $mod_name создан!"; ?>

 

Скачать файлы для программы "Модуль Joomla в один клик":
Скачать

 

Аналогичный подход можно применить и для создания дерева файлов для компонентов Joomla.

 

 

 

Обновлено 05.10.2014 14:02