Приветствую,
немного допилил расширение File ext, результат 4 дневного знакомства с EE в аттаче.
Для работы функций требуется PHP5 - это даёт возможность использовать рекурсивное создание каталогов.
В функции function DLFN_Create_Directory_By_Path нужно допилить рекурсивный chmod для случая когда PHP-сценарий запущен модулем mod_php
я в принципе обошелся без рекурсивного создания каталогов.
если не затруднит прокомментируйте пожалуйста.
добавленные/дополненные строки:
Строки 61-126
/**
* Получаем дату публикации в виде ассоциативного массива по id-поста (entry_id)
* Если есть пост таким entry_id то возвращаем $Entry_Date_Array["yyyy"=>[год],"mm"=>[месяц],"dd"=>[день]]
* Иначе возвращаем False (by Didia_Sc)
**/
function DLFN_Get_Entry_Date_by_entry_id($entry_id=FALSE)
{
global $DB;
if ($entry_id !== FALSE && is_numeric($entry_id))
{
$query = $DB->query("SELECT t.year, t.month, t.day FROM exp_weblog_titles t WHERE t.entry_id = '".$DB->escape_str($entry_id)."'");
if ($query->num_rows < 1)
{
return FALSE;
}
else
{
$Entry_Date_Array["yyyy"] = $query->row['year'];
$Entry_Date_Array["mm"] = $query->row['month'];
$Entry_Date_Array["dd"] = $query->row['day'];
return $Entry_Date_Array;
}
}
else
{
return FALSE;
}
}
/**
* Создание каталога по переданному пути. (by Didia_Sc)
* Возвращается False если тип переменной $path не строковый.
* для работы функции требуется PHP5 - это даёт возможность использовать рекурсивное создание каталогов.
**/
function DLFN_Create_Directory_By_Path($path=FALSE)
{
if(preg_match("/^5\./",phpversion()))
{
if(is_string($path)){
if (file_exists($path)) {
return "Директория $path существует";
} else {
if(mkdir($path, 0777, TRUE)){
/**
стоит допилить рекурсивный chmod для случая когда PHP-сценарий запущен модулем mod_php
**/
chmod($path, 0777);
return "Создана директория $path";
}
else{
return false;
}
}
}
else{
return false;
}
}
else{
return false;
}
}
[b]576-577[/b]
[code]
// Добавил глобальную переменную $IN - by Didia_Sc
global $DB, $DSP, $EXT, $LANG, $PREFS, $IN;
598-601
// Добавить к переменной server_path и file_field['url'] дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$va_entry_date = $this->DLFN_Get_Entry_Date_by_entry_id($IN->GBL('entry_id'));
$vs_entry_date = $va_entry_date["yyyy"].$va_entry_date["mm"]."/";
$file_field['url'] .= $vs_entry_date;
750-751
// Добавил глобальную переменную $IN - by Didia_Sc
global $DB, $EE, $EXT, $FNS, $LANG, $IN;
781-787
// Добавить к переменной server_path и file_field['url'] дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$va_entry_date = $this->DLFN_Get_Entry_Date_by_entry_id($IN->GBL('entry_id'));
$vs_entry_date = $va_entry_date["yyyy"].$va_entry_date["mm"]."/";
$server_path .= $vs_entry_date;
// Создаем дополнительный каталог каталог если он не существует - by Didia_Sc
$this->DLFN_Create_Directory_By_Path($server_path);
1240-1242
// Получаем дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$va_entry_date = $this->DLFN_Get_Entry_Date_by_entry_id($row['entry_id']);
$vs_entry_date = $va_entry_date["yyyy"].$va_entry_date["mm"]."/";
1259-1260
// Добавить к переменной $file дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$thumbs[] = $vs_entry_date.$file;
1270-1271
// Добавить к переменной $file дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$files[] = $vs_entry_date.$file;
1327-1329
// Добавить к переменной server_path и file_field['url'] дополнительное имя каталога, формат каталога для файлов [yyyymm/] - by Didia_Sc
$file_field['url'] .= vs_entry_date;
$file_field['server_path'] .= vs_entry_date;
Первые впечатления о expression engine не самые хорошие.
по моему применялся какой то карявый шаблон проектирования.
во многих файлах встречаются и SQL запросы и куски верстки, кошмар какой то.
однотипные обработки запросов реализованы разными способами, как будто каждый новый разработчик придерживался своего кодестайла.
найти нормальную документацию по обработке глобальных переменных и описание методов и классов я так и не смог.
если это секрет то ElisLab могли бы создать низкоуровневое API и документацию к нему создать.
Есть косяки в ядре ExpressionEngine_1.6.7_Build.20090211 вот например:
core.functions.php
$sql = "SELECT t.entry_id, t.weblog_id, ... t.entry_date, t.year, t.month, t.day, t.entry_date.......
как то безалаберно на мой взгляд.
Если сравнить с CI где и красивая MVC модель, и огромное количество качественной документации, большое количество аддонов, простота понимания кода, то EE на мой взгляд явно позади.
А если учесть, что за EE еще и берут деньги, причем не малые, то по моему выбор ясен.
надеюсь, что вы как эксперты EE меня переубедите.