In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Ошибки при обработке тэгов

From In-Portal Developers Guide

Revision as of 17:22, 4 November 2009 by Alex (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

[[:Category:|]]
Статьи в этой категории

нет статей


Contents

Введение

Данная статья описывает все типичные ошибки при использовании, написании, и модификацмм тэгов для 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 в конфигурационном файле и на шаблоне соответственно, без ошибок писать его название.