K4:Ошибки при обработке тэгов
From In-Portal Developers Guide
(дополнение) |
Current revision (17:22, 4 November 2009) (view source) (дополнение) |
Current revision
This article is not finished yet! You see this message because current Article is finished yet or contains unverified information. How to write an Article. |
| ||
---|---|---|
Статьи в этой категории | ||
нет статей |
Введение
Данная статья описывает все типичные ошибки при использовании, написании, и модификацмм тэгов для K4.
Для каждой из 23 ошибок описание для удобства составлено по следующей схеме:
- Название ошибки.
- Вызов ошибки.
- Получение ошибки.
- Исправление ошибки.
Большинство ошибок проиллюстрировано примерами типичных ситуаций. Часть ошибок есть только для старой версии парсера K4
, остальная часть для NParser
.
Общая рекомендация при работе с тэгами, это аккуратно их применять, согласно правилам написания и использования тегов.
1. Ошибка при вызове тэга с неправильным именем
Fatal Error: Unknown tag: newsletter_TestTag - incorrect tag name or prefix in w:\newsletter\custom\admin_templates\newsletter\newsletter_list.tpl
<inp2:newsletter_TestTag />
Вызов ошибки
Сообщение вызывается из метода Tag::ProcessTag
.
core\kernel\parser\tags.php (307) trigger_error('can\'t process tag '.$this->Tag.' in '.$this->Prefix,E_USER_WARNING);
Получение ошибки
Ошибка возникает при вызове не существующего метода текущего TagProcessor
.
Исправление ошибки
Надо проверить правильность названия тэга для вызываемого префикса.
2. Ошибка при парсинге пустого шаблона
Пользователь видит пустой экран.
Вызов ошибки
Сообщение вызывается из метода Template::LoadTemplate
.
core\kernel\parser\template.php (44) trigger_error("Template file size is 0: $filename", ($silent ? E_USER_NOTICE : E_USER_ERROR) );
Получение ошибки
Ошибка возникает при попытке синтаксического анализатора обработать шаблон с нулевой длиной.
Исправление ошибки
В шаблоне должно быть что-то, иначе зачем нужен пустой шаблон.
3. Ошибка при парсинге шаблона с неправильным именем
Fatal Error: File or block not found: /home/sites/gleb/web/catalyst/core/admin_templates/combined_header.tpl at in w:\catalyst\core\kernel\parser\template.php on line 61
<inp2:m_include t="incs/header1" />
Вызов ошибки
Сообщение вызывается из метода Template::LoadTemplate
.
core\kernel\parser\template.php (61) trigger_error('File or block not found: '.$filename.' at '.$application->Parser->TemplateName, E_USER_ERROR);
Получение ошибки
Ошибка возникает при вызове не существующего имени блока или шаблона.
Исправление ошибки
Надо проверить правильность имени блока или шаблона и проверить подгружен ли блок через тэг <inp2:m_Include t="block_file" />
.
4. Не указано имя блока
Fatal Error: ***Error: Block name not passed to ParseBlock in w:\catalyst\core\kernel\parser\template_parser.php on line 696
<inp2:m_RenderElement />
Ошибку можно получить когда NParser не включен
Вызов ошибки
Сообщение вызывается из метода TemplateParser::ParseBlock
.
core\kernel\parser\template_parser.php (696) trigger_error('***Error: Block name not passed to ParseBlock', E_USER_ERROR);
Получение ошибки
Ошибка возникает при вызове функции RenderElement
без указания имени блока.
Исправление ошибки
Надо для тэгов, которые требуют для работы название блока, всегда его указывать.
5. Пропущено имя шаблона для тэга include
Fatal Error: Template name not specified in <inp2:m_include .../> tag in w:\catalyst\core\kernel\processors\main_processor.php on line 607
<inp2:m_include />
Ошибку можно получить когда NParser
не включен
Вызов ошибки
Сообщение вызывается из метода kMainTagProcessor::MyInclude
.
core\kernel\processors\main_processor.php (606) trigger_error('Template name not specified in <inp2:m_include .../> tag', E_USER_ERROR);
Получение ошибки
Ошибка возникает при вызове функции include
без указания имени шаблона.
Исправление ошибки
Надо для тега include
всегда указывать параметр t
или template
и его значение.
6. Парсер нашел не объявленный тэг
Fatal Error: Tag HelloWorld Undefined in AnnouncementTagProcessor[Agregated Tag]:
HelloWorld in unknown on line 0
<inp2:announcement_HelloWorld />
Ошибку можно получить когда NParser
не включен
Вызов ошибки
Сообщение вызывается из метода TagProcessor::ProcessTag
.
core\kernel\processors\tag_processor.php (38) trigger_error('Tag '.$Method.' Undefined in '.get_class($this).'[Agregated Tag]:'.$tag->RebuildTagData().,E_USER_WARNING);
Получение ошибки
Ошибка возникает при вызове тега HelloWorld
, который не описан в тэг процессоре для префикса announcement
.
Исправление ошибки
Надо проверять всегда, что тэг описан в соответствующем TegProcessor
и без ошибок его название написано на шаблоне.
7. NParser не смог скомпилировать шаблон
Сообщение вызывается из метода NParser::Compile
.
core\kernel\nparser\nparser.php (54) // trigger_error('Template "' . $template_name . '" not compiled because of errors', E_USER_WARNING);
Но ее получить нельзя, т.к. она за комментирована.
8. NParser не смог записать скомпилированный шаблон
Вызов ошибки
Сообщение вызывается из метода NParser::Compile
.
core\kernel\nparser\nparser.php (61) trigger_error('Saving compiled template failed', E_USER_ERROR);
Получение ошибки
Ошибка возникает, когда в методе NParser::Compile
не удалось записать в кэш файл, скомпилированный шаблон. Компиляцию шаблонов можно запустить из
Admin -> Configuration -> System Tools -> Compile Templates (with NParser)
.
Исправление ошибки
Нужно проверить права на все файлы и папки в директории /system
.
9. NParser не смог подключить шаблон
Fatal Error: Cannot include "custom/incs/styles1" - file does not exist in w:\newsletter\core\kernel\nparser\nparser.php on line 306
<inp2:m_include template="custom/incs/styles1"/>
Вызов ошибки
Сообщение вызывается из метода NParser::CheckTemplate
.
core\kernel\nparser\nparser.php (306) trigger_error('Cannot include "' . $t . '" - file does not exist', E_USER_ERROR);
Получение ошибки
Ошибка возникает при вызове тега например include
, которому в параметре template
передан не существующий шаблон.
Исправление ошибки
Надо проверять всегда, что шаблон действительно есть на диске и назван также как и в параметре template
для тега include
.
10. Не определена секция FilterMenu
Warning: no filters defined for prefix block, but DrawFilterMenu tag used in /home/sites/gleb/web/newsletter/core/kernel/db/db_tag_processor.php on line 74
Вызов ошибки
Сообщение вызывается из метода kDBTagProcessor::DrawFilterMenu
.
core\kernel\db\db_tag_processor.php (74) trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawFilterMenu tag used', E_USER_WARNING);
Получение ошибки
Ошибка возникает при вызове тега DrawFilterMenu
, без определения в файле конфигурации секции FilterMenu
.
Исправление ошибки
Надо проверять, что если используется тэг DrawFilterMenu
, то должен быть обязательно определен раздел секции FilterMenu
файле конфигурации.
Альтернативным способом исправления ошибки является убирание параметра menu_filters="yes"
при использовании блока "grid
" в шаблоне со списком.
11. Не определено значение для AutoRefreshIntervals
Warning: no filters defined for prefix block, but DrawAutoRefreshMenu tag used in /home/sites/gleb/web/newsletter/core/kernel/db/db_tag_processor.php on line 135
Вызов ошибки
Сообщение вызывается из метода kDBTagProcessor::DrawAutoRefreshMenu
.
core\kernel\db\db_tag_processor.php (135) trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawAutoRefreshMenu tag used', E_USER_WARNING);
Получение ошибки
Ошибка возникает при вызове тега DrawAutoRefreshMenu
, если в таблице ConfigurationValues
нет значения для переменной AutoRefreshIntervals
.
Исправление ошибки
Переменная AutoRefreshIntervals
носит системный характер, и нельзя ее стирать.
12. Не определен раздел options
Warning: Options not defined for block field BackColor in /home/sites/gleb/web/newsletter/core/kernel/db/db_tag_processor.php</b> on line 867
Вызов ошибки
Сообщение вызывается из метода kDBTagProcessor::PredefinedOptions
.
core\kernel\db\db_tag_processor.php (896) trigger_error('Options not defined for '.$object->Prefix.' field '.$field., E_USER_WARNING);
Получение ошибки
Ошибка возникает при вызове тега PredefinedOptions
, для Field
с kOptionsFormatter
у которого не определен раздел options
.
Исправление ошибки
Надо всегда для поля с kOptionsFormatter
определять в конфигурационном файле options
.
13. Ошибка в название тэга при использование метода ProcessParsedTag
Warning: Tag Link1 Undefined in EMainTagProcessor[Agregated Tag]: Link1 in w:\resumark\core\kernel\processors\tag_processor.php on line 120
function HomePageLink($params) { $o = ''; $o = $this->Application->ProcessParsedTag('m', 'Link1', Array('t' => 'index')); return $o; }
Вызов ошибки
Сообщение вызывается из метода TagProcessor::ProcessParsedTag
.
core\kernel\processors\tag_processor.php (121) $this->Application->handleError(E_USER_ERROR, 'Tag Undefined:'.$prefix.':'.$tag., $file, $line);
Получение ошибки
Ошибка возникает при вызове тега ProcessParsedTag
, для не существующего тэга
Исправление ошибки
Надо всегда внимательно писать название тэга, название префикса.
14. Ошибка в название тэга при использование метода processAggregatedTag
<inp2:m_DefineElement name="myblock_block" > <inp2:Field field="Title" /> <inp2:AgregatedTag /> </inp2:m_DefineElement> <inp2:block_PrintList2 render_as="myblock_block" columns="1" per_page="-1" no_table="1" />
Fatal Error: Tag AgregatedTag Undefined in BlockTagProcessor[Agregated Tag]:
AgregatedTag in w:\newsletter\custom\admin_templates\newsletter\newsletter_body.tpl on line 5
Тэг AgregatedTag
отсутствует в BlockTagProcesser
и не объявлен как Aggregated Tag
ни в одном из конфигурационных файлов.
Вызов ошибки
Сообщение вызывается из метода TagProcessor::processAggregatedTag
.
core\kernel\processors\tag_processor.php (155) $this->Application->handleError(E_USER_ERROR, 'Tag '.$Method.' Undefined in '.get_class($this).'[Agregated Tag]:'.$tag., $file, $line);
Получение ошибки
Ошибка возникает при вызове тега processAggregatedTag
, для не существующего Aggregated Tag
.
Исправление ошибки
Надо внимательно определять Aggregated Tag
в конфигурационном файле. Хороший пример работы с такими тэгами есть в /core/units/images/images_config.php
.
15. Не правильно закрытый тэг в NParser
Fatal Error: Unclosed tag opened by m_DefineElement in w:\newsletter\custom\admin_templates\newsletter\newsletter_body.tpl on line 66
<inp2:m_DefineElement name="newsletter_block" > <inp2:Field field="Title"/>
Вызов ошибки
Сообщение вызывается из метода NParser::CompileRaw
.
core\kernel\nparser\nparser.php (128) $this->Application->handleError(E_USER_ERROR, 'Unclosed tag opened by '.$this->TagInfo($this->Stack[$this->Level]->Tag), $this->Stack[$this->Level]->Tag['file'], $this->Stack[$this->Level]->Tag['line']);
Получение ошибки
Ошибку выдает NParser, когда пытается скомпилировать шаблон и находит не закрытый тэг.
Исправление ошибки
Надо всегда внимательно определять тэги, согласно строгим правилам NParser.
16. Синтаксическая ошибка в написание тэга в NParser
Не удалось получить ошибку, т.к. когда есть синтаксические ошибки в название тэга, то они уже раньше отлавливаются другими ошибками.
Вызов ошибки
Сообщение вызывается из метода NParser::SplitTag
.
core\kernel\nparser\nparser.php (160) $this->Application->handleError(E_USER_ERROR, 'Incorrect tag format: '.$tag['tag'], $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает NParser, когда пытается скомпилировать шаблон c неверным форматом тэга.
Исправление ошибки
Надо всегда внимательно определять тэги, согласно строгим правилам NParser.
17. Нет открывающего тэга в NParser
Fatal Error: Closing tag without an opening: m_DefineElement - probably opening tag was removed or nested tags error in w:\newsletter\custom\admin_templates\newsletter\newsletter_body.tpl on line 69
<inp2:Field field="Title"/> </inp2:m_DefineElement>
Вызов ошибки
Сообщение вызывается из метода NParser::ProcessTag
.
core\kernel\nparser\nparser.php (207) $this->Application->handleError(E_USER_ERROR, 'Closing tag without an opening: '.$this->TagInfo($tag).' - probably opening tag was removed or nested tags error', $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает NParser, когда пытается скомпилировать шаблон без открывающего тэга DefineElement
, но при этом есть закрывающий тэг DefineElement
.
Исправление ошибки
Надо всегда внимательно определять тэги, согласно строгим правилам NParser.
18. Нет открывающего тэга в NParser
Fatal Error: Closing tag m_if does not match opening tag at current nesting level (m_DefineElement opened at line 66) in w:\newsletter\custom\admin_templates\newsletter\newsletter_body.tpl on line 68
<inp2:m_DefineElement name="newsletter_block" > <inp2:Field field="Title"/> </inp2:m_if>
Вызов ошибки
Сообщение вызывается из метода NParser::ProcessTag
.
core\kernel\nparser\nparser.php (212) $this->Application->handleError(E_USER_ERROR, 'Closing tag '.$this->TagInfo($tag).' does not match opening tag at current nesting level ('.$this->TagInfo($opening_tag).'opened at line '.$opening_tag['line'].')', $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает NParser, когда пытается скомпилировать шаблон открывающем тэгом DefineElement
, но при этом есть закрывающий тэг m_if
.
Исправление ошибки
Надо всегда внимательно определять тэги, согласно строгим правилам NParser.
19. Не правильный символ в названии тэга в NParser
Fatal Error: Tag without a handler: m_Define - probably missing <empty /> tag closing in w:\newsletter\custom\admin_templates\newsletter\newsletter_body.tpl on line 66
<inp2:m_Define Element name="newsletter_block"> <inp2:block.newsletter_PrintNewsletterBlocks /> </inp2:m_DefineElement>
Вызов ошибки
Сообщение вызывается из метода NParser::ProcessTag
.
core\kernel\nparser\nparser.php (225) $this->Application->handleError(E_USER_ERROR, 'Tag without a handler: '.$this->TagInfo($tag).' - probably missing <empty /> tag closing', $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает NParser, когда пытается скомпилировать шаблон c открывающем тэгом DefineElement
в котором есть перевод каретки.
Исправление ошибки
Надо всегда внимательно определять тэги, согласно строгим правилам NParser.
20. Не правильный тэг в NParser
<inp2:newsletter_RenderElement1 />
Вызов ошибки
Сообщение вызывается из метода NParser::CompileTag
.
core\kernel\nparser\nparser.php (293) $this->Application->handleError(E_USER_ERROR, 'Unknown tag: '.$this->TagInfo($tag).' - incorrect tag name or prefix ', $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает CompileTag, когда пытается скомпилировать шаблон с неизвестным тэгом.
Исправление ошибки
Надо всегда внимательно определять тэги, название в TegProcessor
должно совпадать с названием, которое используется на шаблоне.
21. Не правильное имя блока для метода ParseBlock в NParser
<inp2:m_RenderElement name="test"/>
Вызов ошибки
Сообщение вызывается из метода NParser::ParseBlock
.
core\kernel\nparser\nparser.php (436) $this->Application->handleError(E_USER_ERROR, 'Rendering of undefined element '.$params['name']., $trace_results[0]['file'], $trace_results[0]['line']);
Получение ошибки
Ошибку выдает ParseBlock, когда пытается сделать Parse
для не определенного блока или шаблона.
Исправление ошибки
Надо всегда внимательно определять блоки и шаблоны, не забывать подключать их.
22. Не определены все обязательные параметры при вызове тэга в NParser
<inp2:m_RenderElement name="test"/>
Вызов ошибки
Сообщение вызывается из метода _BlockTag::_checkRequiredParams
.
core\kernel\nparser\ntags.php (53) $this->Application->handleError(E_USER_ERROR, $error_msg, $tag['file'], $tag['line']);
Получение ошибки
Ошибку выдает метод _checkRequiredParams
, когда пытается проверить наличие всех необходимых параметров при вызове тэга.
Исправление ошибки
Надо всегда корректно вызывать тэги, добавляя все необходимые для работы тэга параметры.
23. Не определена секция в конфигурационном файле
<inp2:m_RenderElement name="combined_header" section="custom:newsletter1" prefix="newsletter" title_preset="newsletter_list" pagination="1"/>
Вызов ошибки
Сообщение вызывается из метода AdminTagProcessor::SectionInfo
.
core\units\admin\admin_tag_processor.php (161) trigger_error('Use of undefined section "' . $section . '" in "' . __METHOD__ . '"', E_USER_ERROR);
Получение ошибки
Ошибку выдает SectionInfo, когда пытается сравнить название секции в шаблоне с тем, что есть в конфигурационном файле.
Сейчас получить четко данную ошибку нельзя, т.к. из AdminTagProcessor
убран вызов данной ошибки.
Исправление ошибки
Надо правильно определять раздел Sections
в конфигурационном файле и на шаблоне соответственно, без ошибок писать его название.
Описание (итого: 5.25 h) |
---|
23 ошибки: core\kernel\parser\tags.php (307) trigger_error('can\'t process tag '.$this->Tag.' in '.$this->Prefix,E_USER_WARNING); core\kernel\parser\template.php (44) trigger_error("Template file size is 0: $filename", ($silent ? E_USER_NOTICE : E_USER_ERROR) ); core\kernel\parser\template.php (61) trigger_error('File or block not found: '.$filename.' at '.$application->Parser->TemplateName, E_USER_ERROR); core\kernel\parser\template_parser.php (696) trigger_error('***Error: Block name not passed to ParseBlock', E_USER_ERROR); core\kernel\processors\main_processor.php (606) trigger_error('Template name not specified in <inp2:m_include .../> tag', E_USER_ERROR); core\kernel\processors\tag_processor.php (38) trigger_error('Tag '.$Method.' Undefined in '.get_class($this).'[Agregated Tag]: |