GenericSetup: что делает toolset.xml, если ToolInit все еще должен вызываться из initialize () - PullRequest
1 голос
/ 09 апреля 2011

Кажется, что toolset.xml идет только наполовину. В идеале он должен иметь возможность покончить с вызовом ToolInit в initialize () в __init__.py. Но я не смог заставить значок инструмента отображаться в ZMI без вызова ToolInit.

Ответы [ 2 ]

3 голосов
/ 09 апреля 2011

Вызов ToolInit в функции initialize регистрирует класс инструмента как нечто, что можно добавить в папки на основе OFS в базе данных - в первую очередь он регистрирует фабрику для создания экземпляров класса. Это в основном то же самое, что ContentInit делает для обычных классов контента.

Как только класс зарегистрирован и его мета-тип известен, экземпляры класса могут быть добавлены в основанные на OFS папки. Шаги GenericSetup отвечают за управление постоянным контентом и могут использоваться для добавления экземпляров инструмента в базу данных.

Если бы мы хотели избежать кода в функции инициализации, нам нужно было бы вместо этого создать несколько пользовательских директив ZCML и использовать их в файле configure.zcml для регистрации типа и его фабрики. Ловкость пошла по этому пути, но она недоступна для типов контента на основе архетипов или общих классов, таких как инструменты.

2 голосов
/ 09 апреля 2011

Целью toolset.xml является создание экземпляров инструментов в базе данных.Это может также использоваться, чтобы удалить инструменты;это очень полезно, например, на этапах обновления.

Пример toolset.xml:

<?xml version="1.0"?>
<tool-setup>
  <required tool_id="portal_foo" class="dotted.path.to.FooTool" />
  <forbidden tool_id="portal_spam" />
</tool-setup>

В этом примере toolset.xml создаст экземпляр класса FooTool как portal_foo в своем контексте и удалит еголюбой объект с идентификатором portal_spam, если он присутствует.

Обратите внимание, что вы можете использовать toolset.xml в любом профиле GenericSetup, а не только в пакете, который определяет инструмент в первую очередь, например, в общей политикепакеты для сайта, который вы разрабатываете.

...