четверг, 18 ноября 2010 г.

Система обеспечения учебного процесса

Сегодня докладывал на Ученом совете института о разработанной мною системе поддержки учебного процесса на основе CMS Plone для кафедры информационных технологий. Только докладывая осознал, как много уже сделано. Курьез заключался в том, что предыдущий докладчик рассказывал о такой же системе, разрабатываемой  нашим ВЦ для всего института. Оказалось, что ситемы сравнимы.

четверг, 28 октября 2010 г.

Установка Faculty/Staff Directory

В результате стандартной установки Faculty/Staff Directory (buildout ->
Дополнительные продукты) возникала ошибка при связывании пользователя
 с группами. Решение, найденное в Интернете http://www.uwosh.edu/ploneprojects/documentation/how-tos/how-to-fix-the-ploneformgen-install-problem-on-plone-3.0.1-3.0.2:
1.  Деинсталируем Faculty/Staff Directory и Relation в "Дополнительные продукты"
2.  В "Правилах контента" снимаем флажок "Установить глобально"
3. Возвращаем продукты на место
4. Снова устанавливаем флажок.
Все работает. Правда уже надоели эти танцы с бубном. Простого человеческого счастья хочется

пятница, 4 июня 2010 г.

Рекомендации по локализации продукта Plone.

Рекомендации по локализации. Объяснение несколько усложнено.
1. Локализация продукта
Для локализации необходимо установить пакет i18ndude. При полной установке Archgenxml он устанавливается автоматически. Проверить наличие i18ndude.exe в Python24\Scripts.
При генерации продукта Archgenxml собирает все ссылки на записи, которые нужно локализовать в файл generated.pot в каталоге i18n продукта. Все преобразования производятся в папке locales продукта, поэтому, если ее нет - ее нада ее создать.
Дополнительно в папке locales создаем папку ru, а в ней папку LC_MESSAGES.
Сoздать в директории locales пустой текстовый файл c именем имя_продукта.pot в кодировке "UTF-8 без BOM" (я для этого использую Notepad++) и скопировать в него содержимое файла generated.pot. Можно просто скопировать и переименовать этот файл, а потом изменить у него кодировку в Notepad++.
Аналогичным образом создать в папке locales\ru\LC_MESSAGES файл с именем имя_продукта-ru.po.
Важно: если имя продукта с заглавной буквы, то и имена файлов - тоже.
В файле имя_продукта-ru.po строки :
"Language-Code: en\n"
"Language-Name: English\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"

заменить на:

"Language-Code: ru\n"
"Language-Name: Русский\n"
"Preferred-Encodings: utf-8\n"
"Domain: plone\n"

В строках вида
msgid "########"
msgstr ""
Вставить нуждый перевод в поле: msgstr "здесь перевод"
После преобразования скопировать файл имя_продукта-ru.po в папку i18n.
Перезапустить Plone, иногда нужно переустановить продукт.
Файл имя_продукта.pot на данном этапе не исползуется. Он будет необходим при подключении для перевода дополнительных шаблонов, которые созданы вручную, а не указаны в модели.

2. Локализация интерфейса Plone - например метку продукта в меню "Добавить новый элемент"
Выполнить внутри каталога продукта команду c:\Python24\Scripts\i18ndude sync --pot locales/plone.pot.
Выполнить внутри каталога продукта команду c:\Python24\Scripts\i18ndude rebuild-pot --pot locales/plone.pot --create plone profiles.
В результате в каталоге locales будет создан файл plone.pot, где будут собраны все ссылки на поля локализации, связанные с главным интерфейсом Plone.
Сoздать в директории i18n пустой текстовый файл имя_продукта-plone-ru.po в кодировке "UTF-8 без BOM".
Выполнить внутри каталога продукта команду c:\Python24\Scripts\i18ndude sync --pot locales/plone.pot i18n/имя_продукта-plone-ru.po
В результате в каталоге i18n будет создан файл имя_продукта-plone-ru.po с соответствующими полями.
В файле имя_продукта-plone-ru.po строки :
"Language-Code: en\n"
"Language-Name: English\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"

заменить на:

"Language-Code: ru\n"
"Language-Name: Русский\n"
"Preferred-Encodings: utf-8\n"
"Domain: plone\n"

В строках вида
msgid "########"
msgstr ""
Вставить нуждый перевод в поле: msgstr "здесь перевод"

Пока все. Есть еще возможности для перевода строковых величин, объявляемых в репеменных, списках и т.п.

вторник, 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

вторник, 23 февраля 2010 г.

Вебинар об использовании Plone для электронного обучения

22 февраля провел вебинар для участников сообщества e-Learning PRO (http://elearningrus.ning.com). На мой взгляд слушатели проявили большой интерес. Добавил тему форума для обсуждения:
http://elearningrus.ning.com/forum/topics/ispolzovanie-cms-plone-dlya. Неожиданно для себя становлюсь популяризатором Plone.

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