Низкий поклон kris и особенно Из кур щавель за проделанную работу и с подробностями. Обязательно внесу эти правки в следующую версию.
Сейчас же поправлю неточность Из кур щавеля, изложенную в его пункте 2. Дело в том, что несмотря на появившееся в Impera CMS пространство особых адресов, контролируемое движком, веб сервер Apache, впрочем как и другие, тем не менее отслеживает статус ErrorDocument для отсутствующих на сайте изображений, музыкальных и видеофайлов, архивов и тому подобное.
Обратите внимание, что по следующим несуществующим адресам открываются две разные страницы 404:
- страница 404, прописанная в шаблоне
- страница 404, прописанная в специальных страницах админпанели
Таким образом, специальная страница 404 в админпанели вполне оправдана. Только она предназначена не для отсутствующих товаров, статей и подобного, а строго для отсутствующих файлов. Правильнее было назвать ее страницей "Файл не найден".
Поскольку эта специальная страница отдается с кодом 200, покажу ниже на скриншотах (все кликабельны для увеличения), как добавить только на эту страницу код ответа 404.
Сначала переходим в список специальных страниц. На всякий случай уточню, в других движках такие страницы обычно называют статическими страницами.

Теперь находим в списке страницу, предназначенную для события "Страница на нейдена" (файл не найден), и щелкаем по ее названию, чтобы отредактировать.

Важный момент: Impera CMS поддерживают работу с плагинами, что дает возможность выполнить на отдельных страницах какие-то свои действия, не предусмотренные движком.
У товаров, статей, новостей, специальных страниц и так далее есть поле Плагины:, где можем перечислить через запятую имена тех плагинов, какие хотим запустить в перечисленном порядке, когда посетитель попал именно на эту страницу.
Предположим, мы написали какой-то свой малюсенький плагин Page404 (его полный код приведен в конце поста). Имя этого плагина укажем в соответствующем поле, что показано на скриншоте.

Схема работы с плагином: Когда движок начинает "рисовать" некоторую страницу, он сначала смотрит, пожелал ли менеджер магазина подключить к этой странице какие-то свои плагины. Если так, движок поочередно загружает указанные плагины и отдает управление им. В ответ ожидает, что "скажет" каждый плагин. Варианты ответа таковы по смыслу:
- требую немедленно прекратить отрисовку страницы и показать СООБЩЕНИЕ (его формирует сам плагин)
- разрешаю продолжать и прошу добавить на страницу НЕКУЮ ИНФОРМАЦИЮ (сформированную плагином)
Таким образом, плагин - это средство выполнить перед страницей какие-то действия и сообщить движку свой вердикт или какой информацией хотелось бы дополнить данную страницу. Причем вывести эту информацию можно в необходимой точке шаблона с помощью следующей инструкции, где вместо помеченного синим цветом достаточно поставить имя любого другого плагина, написав имя строчными буквами. Завершающий модификатор |default:'' предохраняет работу шаблона от ситуации, когда плагина нет вообще на сайте, или менеджер магазина пока отключил его, или посетитель находится на странице, где менеджер не приказывал запустить плагин.
...
...
{* здесь хотим показать результат плагина SomeThing *}
{$plugin_something|default:''}
{* здесь хотим показать результат плагина HelloWorld *}
{$plugin_helloworld|default:''}
...
...
Хотелось бы отметить, что Impera CMS - это одна из немногих систем с очень высокой управляемостью из админпанели. Менеджер магазина может управлять даже тем, какие плагины разрешает или запрещает использовать.
Для примера рассмотрим, как происходило бы добавление воображаемого нами плагина Page404. Первым делом менеджер переходит на страницу зарегистрированных модулей.

Затем нажимает ссылку добавить, что показано на скриншоте. Добавление плагина означает его регистрацию для возможности использовать на клиентской стороне сайта.

Форма регистрации плагина показана ниже. Наиболее важные поля - это Класс: и флажки. От имени класса зависит имя PHP-файла, в котором будет размещен исходный код плагина или модуля.
Отличие модуля и плагина в том, что модуль предназначен для полной обработки конкретного типа страниц - условно говоря, модуль рисует центральную часть страницы строго определенного типа, а плагин - для интеграции какого-то (скажем небольшого) блока информации в любую страницу, где плагин пожелали запустить, или же запрета отрисовки этой страницы. То есть плагины запускаются как бы "из модуля", однако в тот момент, когда он уже создан, но еще не начал действовать.

Следующий скриншот просто демонстрирует, что плагин успешно добавлен и появился в списке зарегистрированных, а также что для него включены все необходимые в данной ситуации флажки.

Два следующих скриншота показывают, где производить коррецию корневого файла .htaccess, если для специальной страницы 404 менеджер магазина вдруг изменил URL страницы. Сначала переходим на страницу редактирования этого файла.

Далее исправляем нужное место файла на тот новый относительный URL, что был назначен странице 404. За всю практику этот URL никто ни разу не менял. Но во всяком случае будете знать, где это сделать.

Осталось показать исходный код плагина Page404. Делаем следующее:
- находим внутри движка папку http://сайт/objects/
- создаем в этой папке вложенную папку page404, то есть получили http://сайт/objects/page404/
- и уже в этой папке создаем файл Page404.php следующего содержания
// =======================================================================
/**
* Плагин отправки кода ответа "HTTP/1.0 404 Not Found"
*
* @package Impera CMS
* @link http://imperacms.ru/
*/
// =======================================================================
class Page404 {
public $body = '';
// ===================================================================
/**
* Конструктор класса
*
* @access public
* @param object $impera объект движка
* @return void
*/
// ===================================================================
public function __construct ( & $impera ) {
}
// ===================================================================
/**
* Запуск плагина
*
* @access public
* @param object $module модуль, из которого был вызван плагин
* @return boolean TRUE = продолжить, FALSE = прекратить
*/
// ===================================================================
public function fetch ( & $module ) {
// отправляем код 404
header('HTTP/1.0 404 Not Found');
// не хотим дополнять контент страницы своей информацией
$this->body = '';
// разрешаем продолжить отрисовку страницы
return TRUE;
}
}
То есть плагин должен содержать, как минимум, общедоступное свойство body, общедоступный метод fetch и конструктор __construct (необязательно).