WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


registerType(tender, PROJECTNAME) Файл tenders_view.pt. Файлы шаблонов хранятся в директории skins и имеют расширение *.pt
Pages:     | 1 |   ...   | 2 | 3 ||

конкурсную документацию и др. необходимую информацию. Инфор- # Import the type, which results in registerType() being called мация о конкурсе должна размещаться администратором сайта в виде import tender заполнения формы с предопределенными полями. Вывод сведений # initialize the content, including types and add permissions должен осуществляться в виде общей таблицы.

content_types, constructors, ftis = process_types( listTypes(PROJECTNAME), Анализ задачи:

PROJECTNAME) • Необходимо сформировать новый тип, который описывается с registerDirectory('skins', skin_globals) помощью предопределенных полей. Новый тип формируется на основе архетипов;

utils.ContentInit( • Стандартные режимы отображения не позволяют отображать PROJECTNAME + ' Content', content_types = content_types, созданный тип в требуемом виде. Для реализации требуемого permission = ADD_CONTENT_PERMISSION, вида необходимо будет написать свой шаблон, с использовани extra_constructors = constructors, fti = ftis, ем TAL.

).initialize(context) Файл config.py содержит сонфигурационные настройки продукта Файл install.py. Для простых инсталляторов можно принять этот файл как данность и просто скопировать его в свой проект from Products.CMFCore.CMFCorePermissions import setDefaultRoles, ModifyPortalContent """\ from Products.Archetypes.public import DisplayList This file is an installation script for this skin.

#Название продукта It is meant to be used as an External Method.

PROJECTNAME = "tenders" To use, either use Plone 2.0+ to install, or add an external # Название директории хранения шаблонов method to the root of the Plone Site that you want the skin SKINS_DIR = 'skins' registered GLOBALS = globals() in with the configuration:

# Определение прав доступа id: install_skin ADD_CONTENT_PERMISSION = "tenders_list: Add Content" title: Install Skin *optional* # Set up default roles for permissions module name: ExampleFileSystemSkin.Install setDefaultRoles(ADD_CONTENT_PERMISSION, ('Manager', 'Owner',)) function name: install Then go to the management screen for the newly added external method and click the 'Try it' tab.

34 """ listTypes(PROJECTNAME), PROJECTNAME) from Products.CMFCore.TypesTool import ContentFactoryMetadata out.write("installed types\n") from Products.CMFCore.DirectoryView import addDirectoryViews from Products.CMFCore.utils import getToolByName def install(self):

from Products.CMFCore.CMFCorePermissions import ManagePortal out=StringIO() from Products.Archetypes.public import listTypes from Products.Archetypes.Extensions.utils import installTypes setupTypes(self, out) from Products.tenders.config import * setupSkin(self, out) out.write('Installation completed.\n') from cStringIO import StringIO return out.getvalue() import string from Products.tenders import skin_globals Файл tender.py описывает основную схему, т.е. основные поля формы skin_names = ('tenders',) # tender.py # -*- coding: utf-8 -*- def setupSkin(self, out): """A document type which may contain images and number of fields""" skinsTool = getToolByName(self, 'portal_skins') #Импорт используемых библиотек # Add directory views from AccessControl import ClassSecurityInfo try:

addDirectoryViews(skinsTool, 'skins', skin_globals) try:

out.write( "Added directory views to portal_skins.\n" ) from Products.LinguaPlone.public import * except: except ImportError:

out.write( '*** Unable to add directory views to # No multilingual support portal_skins.\n') from Products.Archetypes.public import * print "No LinguaPlone support" # Go through the skin configurations and insert the skin skins = skinsTool.getSkinSelections() # CMF for skin in skins: from Products.CMFCore import CMFCorePermissions path = skinsTool.getSkinPath(skin) # AT path = map(string.strip, string.split(path,',')) from Products.Archetypes.public import * changed = 0 from Products.Archetypes.Field import ScalableImage for skin_name in skin_names: from Products.Archetypes.Marshall import PrimaryFieldMarshaller if skin_name not in path:

try: from config import * path.insert(path.index('custom')+1, skin_name) changed = 1 from Products.ATContentTypes.content.document import ATDocument except ValueError: from Products.ATContentTypes.content.schemata import path.append(skin_name) ATContentTypeSchema changed = #Импорт имени проекта if changed: from Products.tenders.config import PROJECTNAME path = string.join(path, ', ') # addSkinSelection will replace existing skins as well.

skinsTool.addSkinSelection(skin, path) # Copy the ATDocument schema (to avoid modifying the original) and out.write("Added %s to %s skin\n" % (', append our '.join(skin_names),skin)) # own fields for the images and attachments manager widgets.

else:

out.write("Skipping %s skin, %s already set up\n" % #Описание схемы. Типов полей и виджетов (widget – расширение возмож(skin, ', '.join(skin_names))) ностей полей, # например, поле время/дата может иметь виджет календарь, который def setupTypes(self, out): позволяет installTypes(self, out, # пользователю набирать дату и время не вручную, а выбирать с помощью 36 # календарика) ), # При генерации формы поле title будет формироваться автоматически DateTimeField('cutoff_date3', (оно наследуется из BaseSchema, поэтому при определении своей схемы searchable=1, полу title не указывается) required=0, widget = CalendarWidget( schema = Schema(( label="Продление срока подачи заявок 2", show_hm = False), ), # Поле FileField позволяет прикреплять файлы FileField('notification', FileField('tenders_result1', searchable=1, searchable=1, required=0, required=0, default="", default="", widget=FileWidget( widget=FileWidget( label="Извещение", label="Протокол 1", show_content_type=True), show_content_type=True), ), ), FileField('documentation', FileField('tenders_result2', searchable=1, searchable=1, required=0, required=0, default="", default="", widget=FileWidget( widget=FileWidget( label="Конкурсная документация", label="Протокол 2", show_content_type=True), show_content_type=True), ), ), StringField('contract_price', FileField('tenders_result3', searchable=1, searchable=1, required=1, required=0, default="0.00", default="", widget = StringWidget( widget=FileWidget( label="Максимальная цена контракта", label="Протокол 3", size=15), show_content_type=True), ), ), )) DateTimeField('publication_date', searchable=1, required=1, widget = CalendarWidget( # Объявление класса. Обязательно указывается новый тип объекта внутри label="Дата публикации на сайте", системы show_hm = False), # portal_type и новое имя архетипа archetype_name, оно будет появ ), ляться в списке # добавляемых объектов DateTimeField('cutoff_date1', searchable=1, required=1, class tender (BaseContent):

widget = CalendarWidget( """ label="Дата окончания срока подачи заявок", Документ, содержащий объявление о тендере show_hm = False), """ ), DateTimeField('cutoff_date2', # Standard content type setup searchable=1, required=0, portal_type = meta_type = 'tender' widget = CalendarWidget( archetype_name = 'Тендер' label="Продление срока подачи заявок 1", schema = BaseSchema + schema show_hm = False), typeDescription= 'Документ, содержащий объявление о тендере' 38 typeDescMsgId = 'description_edit_image' ="" tal:attributes="href result/notification/absolute_url">извещение
нет материалов
'allow_discussion': 0, 'immediate_view': 'base_view', документация

contract_price goes heredate.

month.

metal:use-macro="here/main_template/macros/master" |nothing">year

cutoff_date1 goes here date.

cutoff_date1 goes here month.

cutoff_date1 goes here year


Срок продлен до:

|nothing">cutoff_date2 goes here date.

Title or id cutoff_date2 goes here month.

cutoff_date2 goes here year.


Срок продлен до:

cutoff_date3 goes here date.

cutoff_date3 goes here month.

|nothing">cutoff_date3 goes here year.

Добавление и редактирование контента.......................................................... Добавление страницы...................................................................................... Редактирование страницы...............................................................................
Наименование продукции, товаров и услуг Максимальная цена контракта, руб. Дата размещения на сайтеДата окончания срока подачи заявок
title 40 Протокол 1 Результаты не объявлены Протокол 2 Протокол 3 Установка и настройка Plone (под Windows)..................................................
Установка метаданных для документа........................................................... Дата вступления в силу.................................................................................... Публикация документа.................................................................................... Рабочий цикл создания документа (workflow).............................................. Back Инструменты сайта.......................................................................................... Инструменты разработчика............................................................................. Элементы TAL.................................................................................................. Архетипы (Archetypes)..................................................................................... Содержание....................................................................................................... 42
Pages:     | 1 |   ...   | 2 | 3 ||










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.