| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
AleXp 25.09.2005 15:49
Чего соорудил-то:@GetDirIndex[pathToDir][_tableIndex;_flagZero]
##################################
# Возвращает имя индексного файла каталога.
#
# string
# GetDirIndex[
# string pathToDir;
# ]
$pathToDir[^pathToDir.trim[end;/]]
$_tableIndex[^table:create{path
index.htm
index.php
index.phtml
index.shtml
default.html
default.htm
index.html
default.php
default.phtml
default.shtml
main.html
main.htm
main.php
main.shtml
main.phtml}
# Флаг для принудительного вызова ошибки "деление на ноль"
$_flagZero(0)
^try{
^_tableIndex.menu{
^try{
$_flagZero(1)
^file::load[binary;$pathToDir/$_tableIndex.path]
}{
# Данный блок срабатывает при возникновении ошибки file.access или file.missing
$exception.handled(1)
$_flagZero(0)
}
# Если индексный файл найден, то принудительно вызываем ошибку для выхода из метода .menu
^eval(1/($_flagZero-1))
}
}{
# Обработка ошибки number.zerodivision и присвоение выходного значения оператору @GetDirIndex[]
$exception.handled(1)
$result[$_tableIndex.path]
}
#end @GetDirIndex[]Как ни странно, но всё работает :) Фишка в том, что производится аварийный выход из метода ^table.menu{}, но в $_tableIndex.path сохраняется указатель на "правильный" индексный файл директории, который и используется в качестве результаты работы всего оператора.