вторник, 25 мая 2010 г.

Установка Archgenxml в Windows

1. Скачиваем http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi и устанавливаем Python2.4.4.
2. Скачиваем файл ez_setup.py
3. Помещаем этот файл в C:\Python24 и запускаем python ez_setup.py. Этот скрипт установит пакет setuptools.После этого в Python24\Scripts должен появиться файл easy_instal.exe. Во все время выполнения должен быть обеспечен доступ в интернет.
4. Из папки С:\Python24\Scripts запускаем easy_install.exe archgenxml
и ждем, пока через Интернет будет устанавливаться Archgenxml и все дополнительные пакеты. После установки в C:\Python24\Scripts должен появиться файл archgenxml.exe, его и надо будет использовать для генерации продуктов из модели.
5. В Python24 найдите файл ArchGenXMLprofile.xmi - это профиль для генерации продукта.
6. Создаем папку для хранения профиля profiles (например C:\profiles) и помещаем ArchGenXMLprofile.xmi туда.
7. Создаем файл с именем .agx_zope_path и содержимым:
C:\Plone3\Zope\lib\python
8. Этот файл помещаем в свою личную папку - C:\Documents and Settings\имя пользователя\ При необходимости в этом файле скорректируйте путь в соответствии с Вашей инсталяции Plone.
9. Для удобства в папке C:\Plone3\Data\Products создаем файл generate.bat c содержимым:
C:\Pythin24\Scripts\archgenxml.exe --profile-dir=C:\profiles %1.zargo -o 1%
В файле generate.bat должны быть указаны пути, указывающие на реальное положение archgenxml.exe и папки с ArchGenXMLprofile.xmi
10. Помещаем файл модели тоже в C:\Plone3\Data\Products.
Генерация продукта производится вызовом generate.bat модель.zargo, где модель - имя файла модели. При удачной генерации в папке Products появится папка с именем Вашей модели.

воскресенье, 16 мая 2010 г.

Получение значения поля объекта

Вопрос:Во всех шаблонах, встроенных в Plone используется работа с полями. Как получить значение по полю, зная имя поля? Нужно ли для этого обращаться к самому созданному объекту?

Ответ:
К полю можно обратиться и отобразить его в шаблоне можно несколькими способами, это зависит от задачи.
Если нужно отобразить поле с его виджетом, определенным в схеме, то
<metal:field use-macro="python:here.widget('title', mode='view')"> Title </metal:field> отображает виджет со значением поля как в форм просмотра,
<metal:field use-macro="python:here.widget('title', mode='edit')"> Title </metal:field> отображает виджет со значением поля как в форме редактирования
Получение значения поля в шаблоне:
<tal:entry tal:repeat="item folderContents">
 <tal:block tal:define="item_url item/getURL|item/absolute_url;
      item_id item/getId|item/id;
      item_title_or_id item/pretty_title_or_id;
      item_description item/Description;
      item_type item/portal_type;
      item_type_title item/Type;
      item_modified item/ModificationDate;
      item_created item/CreationDate;
      item_icon python:plone_view.getIcon(item);
      item_type_class python:'contenttype-' + normalizeString(item_type);
      item_wf_state item/review_state|python: wtool.getInfoFor(item, review_state', '');
      item_wf_state_class python:'state-' + normalizeString(item_wf_state);
      item_creator item/Creator;
      item_start item/start/ISO|item/StartDate|nothing;
      item_end item/end/ISO|item/EndDate|nothing;
      obj python:item.getObject();
      ">
..............
</tal:block>
</tal:entry>
В этом примере различные формы получения значений.
obj python:item.getObject(); - получение самого объекта.
К объекту обращаться нужно всегда, просто часто это делается неявно. В шаблоне и классе шаблона мы обращаемся к объекту как context. Если используется предварительная обработка в классе шаблона, то обращение к классу шаблона происходит через view:
tal:content="view/myprop",
tal:content="python:view.myMethod()"
В классе (и в шаблоне тоже) можно получить значение поля объекта:
context.getTitle(), в общем случае context/getИмя_поля_с_заглавной буквы(): context.getMyprop() - это получение значения через accessor. Accessor - автоматически создаваемый метод доступа к полю (аналог get метода в С++)
context используем в шаблоне и в классе шаблона. В классе конитент-типа используем self.
Общий способ получения значения поля:
password= self.getField('password').get(self).
Используется при переопределении accessor. Так при создании класса генерируется метод getPassword(), но его можно переопределить:
class myClass():
......
security.declarePublic('getPassword') # объявление режима доступа к методу
def getPassword(self):
mypass=self.getField('password').get(self)
..... # что-то делаем
return mypassword

Всероссийский конкурс  научно-технологических проектов страница конкурса https://dm-centre.ru/sirius-konkurs-projectov Цель конкурс...