金字塔CMS
w20e.pycms的Python项目详细描述
PYCMS现在只有傻瓜和书呆子才能创建自己的CMS。好哇!总之,这里是w20e.pycms。使用金字塔框架作为基础,
建立在优秀的旧zope(和一些plone)概念之上。cms是使用以下主要概念创建的:
*zodb作为数据库
*zcml作为配置/粘合语言
*small core
*可选组件(如搜索、目录、共享);只包括您喜欢的
cms是一个框架,而不是一个现成的应用程序。你需要做的是创建你自己的金字塔应用程序,使用cms作为基础。我们已经尝试了
使之尽可能简单:使用w20e.pycms.sitemaker(在github或pypi上找到
)获取应用程序的粘贴模板。运行
Paster创建应用程序,然后…
为什么?
---
为了飞行的意大利面怪兽们,又来了一杯cms?好吧,你知道这是怎么回事。你用了几年的plone,发现当你最喜欢的工具是锤子时,所有的问题都有很强的钉化倾向。然后金字塔出现了,为您提供了最好的plone(zodb、zope组件架构、zcml、chameleon等)来创建轻量级应用程序。那么您需要一个
所见即所得的页面…那你需要搜索…分享。然后你醒来时手里拿着一个基本的CMS。不妨分享一下,这样你就可以自己决定是否值得你花点时间。我是说,你不必使用它!
不管怎样,如果你喜欢…
给谁看…?
——
配置很快就是1990年,确信windows 95是有史以来最好的操作系统,或者更愿意使用火箭发射器来对付厨房里的害虫。另一方面,对于那些将fuckit.js列为有史以来最好的js库的人来说,享受terry pratchett,
love buildout en zcml,并认为啤酒不仅仅是早餐饮料。
features
--
你的网站,如果
你不是针对企业市场。如果你这样做了,就离开(去
plone.org网站)!
pycms为您提供:
*zodb用于存储数据
*blobstorage
*用户和组管理
*使用repoze.catalog(可选)搜索
*创建和维护页面
*一个易于扩展的新内容类型框架
*许多zcml配置
*基于(twitter)bootstrap的cms设计
Getting Started
----
项目,要求:
w20e.pycms
最简单的方法是使用我们的粘贴模板
pycms_项目。安装w20e.pycms.sitemaker包(从
github获取),大致如下:
cd<;env>;。/bin/激活
/bin/轻松安装w20e.pycms.sitemakerpycms_project<;package name>;
**设置)
其次,为你的东西创建一个buildout和virtualenv。为什么不使用
w20e.buildoutskel?使用easy_install和
/>
回答"项目名称"问题的"软件包名称",回答"类型"问题的"PYCMS"。
您现在有一堆构建文件,几乎可以运行您的应用程序了!
您很可能会考虑创建一个buildout-my.cfg,它扩展了buildout-base.cfg,并添加了一些开发路径,例如:
develop=
<;创建PYCMS应用程序的路径,以及setup.py所在的路径…>;
运行python bootstrap.py,然后使用配置文件构建。
现在是时候加速引擎了,看看发生了什么。像这样运行
应用程序(在buildout目录内):
如果
这完全是你的超级重复web应用的想法,那就好了!如果没有,请阅读…
-添加默认管理和公共css/js文件(如果需要):
-使用pycms zcml指令,包括您喜欢的任何其他css和js:
<;pycms:css
cssfile="your.css"
csstarget="public"
media="screen"
/>;
<;pycms:js
jsile="your.js"
jstarget="public"
/>;
-覆盖像favicon和robots.txt这样的资源:
<;asset
到_override="w20e.pycms:static/favicon.png"
使用"yourapp:static/favicon.png.png"
/>;
-很可能需要覆盖"content"宏,即调用来显示页面的
。为此,创建自己的pt文件,使其扩展"main.macros['master'],并让它填充"body"槽:
<;metal:define macro define macro="master"
metal:extend macro="main.macros['master']>;
<;html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
i18n:domain="w20e"
xmlns:tal="http://xml.zope.org/namespaces/tal"
>;
<;head/>;
<;body metal:fill slot="body">;
grommit早安……
<;metal:define slot define slot="content"/>;
<;/body>;
<;/html>;
<;/metal:define macro>;
并添加到configure.zcml中(始终假设您调用了宏
main.pt):
<;pycms:macro
name="body"
ptfile="yourpackage:templates/main.pt"
/>;
页面只是带有
文本的东西。没什么大不了的。您可能需要创建自己的内容类型,
操作等。幸运的是,这并不难做到。最好的方法是查看
现有代码…无论如何,这里有一些例子:
actions
----
当前使用的设置
主要使用"透视"或查看内容的方式。在
管理界面中,它们被呈现为"选项卡"。使用zcml配置操作。使用操作语句如下:
<;pycms:action
name="users"
target="./users"
category="perspective"
ctype="site"
/>;
ctype是一个可选筛选器。
content types
----
您可以使用:
<;pycms:ctype
name="your廑type廑id"
factory=".models.yourtype.yourtype"
subtype="someothertype,someeventhertype"
icon="/static/img/yourtype廑icon.png"
/>;向您的类型注册图标、
您的实际型号应该扩展
w20e.pycms.models.base.basecontent
或
w20e.pycms.models.base.basefolder。
您可以
创建一个描述您的模型的xml表单,或者如果您坚持让
做一些更像pythonic的事情,则可以通过编程方式创建您的表单。签出w20e.forms以获取详细信息。
一个简单的模型如下:
from w20e.pycms.model s.base import basecontent
Class somethingSimple(basecontent):
"实际上它更像一个‘对象’…"
def初始(self,content\u id,data=none):
basecontent.\uu初始(self,content\u id,数据)
def base_u id(self):
默认情况下,pycms在<;您的包
home>;/forms/<;content type>;.xml中查找文件,因此在本例中:
<;package home>;/forms/somethingsimple.xml
如果您想要完全不同的内容,请为提供表单的
内容类型配置适配器。工厂:
<;适配器
factory=".your.factory"
用于".your.content.type"
提供"w20e.forms.interfaces.iFormFactory"/>;
并确保它实际实现了iformactory,并且可以创建
表单(w20e.forms.interfaces.iform)。
natures
----
定义内容类型的另一种方法是定义"natures"。让我们面对现实:一个事件有什么特别之处?这真的只是一个有开始和结束日期和位置的页面,不是吗?新闻是什么?这不是很像一页吗?如果你同意,
请继续阅读……
这就是自然。您可以这样注册自然:
<;pycms:nature
name="event"
interface="w20e.pycms_events.interfaces.ievent"
/>;
这将使自然显示在"自然"下拉菜单中。现在
您可以这样离开它,也可以使用w20e.forms.interfaces.iformmodifier实现来修改
页的表单:
<;订阅服务器
for="w20e.pycms_events.interfaces.ievent"
factory="w20e.pycms_events.models.event.event"
提供"w20e.forms.interfaces.iformmodifier"
/>;
,并按照以下行创建一个类事件:
from zope.interface import implements
从w20e.forms.interfaces导入iform,iformmodifier
从w20e.forms.data.field导入field
从w20e.forms.model.fieldproperties导入fieldproperties
从w20e.forms.rendering.control导入input
从w20e.forms.rendering.group导入flowgroup
事件(对象):form.data.addfield(field("end"))
form.data.addfield(field("location"))
grp.addrenderable(input("start","start of event",
extra_classes="datetime",
bind="start"))
grp.addrenderable(输入("end","end of event",bind="end"))
grp.addrenderable(输入("location","location",bind="location"))
form.view.addrenderable(grp,pos=-1)
或者您认为应该添加到页面表单中的任何内容…
--
default robots.txt允许所有操作。根据您的喜欢…
search
----
是否要为您的网站启用搜索?
将此添加到您的configure.zcml中:
<;include package="w20e.pycms"file="search.zcml"/>;
----
是否要为站点启用搜索?
将其添加到您的configure.zcml中:
<;include package="w20e.pycms_sharing"/>;
这是设置依赖项(不要忘记运行构建):
settings
--
pycms.acl.force_new=true false
强制新版本的acl。所有安全数据都将丢失
pycms.catalog.force_new=true false
强制新版本的目录。您的所有条目都将丢失,但您可以运行reindex catalog,一切都会好起来…
pycms.admin用户=<;用户>;<;pwd>;
管理员用户和密码,如:pycms.admin用户=管理员:pipo
pycms.admin机密=<;somesecret>;
此机密可用作获取管理权限的url参数
明智地使用它!
pycms.minify_css=true false
缩小css。默认为false
pycms.minify_js=true false
minify js。默认值为False
pycms.logged_-in_redirect=<;url>;
pycms.rootClass=<;full dotted classname>;
默认值为w20e.pycms.models.site.site
pycms.rootTitle=<;string>;
默认为"欢迎"
pycms.from_addr
发送电子邮件为…
pycms.bcc_addr
也发送到bcc
pycms.after_add_redirect
成功添加后要去哪里
pycms.cancel_add_redirect
添加
pycms.after_del_u redirect
删除后的去向
pycms.tempregister.timout=<;int>;
删除临时对象前的最小秒数
<1.1.2a
----
*pycms内容类型的json表示
*升级jquery+jqueryui
*小补丁
>1.1.1a
----
*最初创建的对象将有一个临时状态,直到它们完成
*现在在基本视图类中添加宏,因此,更容易覆盖
*validation.js修复了引导类名
<1.0.2a
=
*最后我们有了一个严重的(?)许可证。还更新了一些元数据。
1.0.1a
==
*启用了通过基本视图呈现viewlet的调用
建立在优秀的旧zope(和一些plone)概念之上。cms是使用以下主要概念创建的:
*zodb作为数据库
*zcml作为配置/粘合语言
*small core
*可选组件(如搜索、目录、共享);只包括您喜欢的
cms是一个框架,而不是一个现成的应用程序。你需要做的是创建你自己的金字塔应用程序,使用cms作为基础。我们已经尝试了
使之尽可能简单:使用w20e.pycms.sitemaker(在github或pypi上找到
)获取应用程序的粘贴模板。运行
Paster创建应用程序,然后…
为什么?
---
所见即所得的页面…那你需要搜索…分享。然后你醒来时手里拿着一个基本的CMS。不妨分享一下,这样你就可以自己决定是否值得你花点时间。我是说,你不必使用它!
不管怎样,如果你喜欢…
给谁看…?
——
love buildout en zcml,并认为啤酒不仅仅是早餐饮料。
features
--
你的网站,如果
你不是针对企业市场。如果你这样做了,就离开(去
plone.org网站)!
pycms为您提供:
*zodb用于存储数据
*blobstorage
*用户和组管理
*使用repoze.catalog(可选)搜索
*创建和维护页面
*一个易于扩展的新内容类型框架
*许多zcml配置
*基于(twitter)bootstrap的cms设计
Getting Started
----
项目,要求:
w20e.pycms
最简单的方法是使用我们的粘贴模板
pycms_项目。安装w20e.pycms.sitemaker包(从
github获取),大致如下:
/bin/轻松安装w20e.pycms.sitemakerpycms_project<;package name>;
**设置)
其次,为你的东西创建一个buildout和virtualenv。为什么不使用
w20e.buildoutskel?使用easy_install和
/>
回答"项目名称"问题的"软件包名称",回答"类型"问题的"PYCMS"。
您现在有一堆构建文件,几乎可以运行您的应用程序了!
您很可能会考虑创建一个buildout-my.cfg,它扩展了buildout-base.cfg,并添加了一些开发路径,例如:
develop=
<;创建PYCMS应用程序的路径,以及setup.py所在的路径…>;
运行python bootstrap.py,然后使用配置文件构建。
现在是时候加速引擎了,看看发生了什么。像这样运行
应用程序(在buildout目录内):
如果
这完全是你的超级重复web应用的想法,那就好了!如果没有,请阅读…
-添加默认管理和公共css/js文件(如果需要):
-使用pycms zcml指令,包括您喜欢的任何其他css和js:
<;pycms:css
cssfile="your.css"
csstarget="public"
media="screen"
/>;
<;pycms:js
jsile="your.js"
jstarget="public"
/>;
-覆盖像favicon和robots.txt这样的资源:
<;asset
到_override="w20e.pycms:static/favicon.png"
使用"yourapp:static/favicon.png.png"
/>;
-很可能需要覆盖"content"宏,即调用来显示页面的
。为此,创建自己的pt文件,使其扩展"main.macros['master'],并让它填充"body"槽:
<;metal:define macro define macro="master"
metal:extend macro="main.macros['master']>;
<;html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
i18n:domain="w20e"
xmlns:tal="http://xml.zope.org/namespaces/tal"
>;
<;head/>;
<;body metal:fill slot="body">;
grommit早安……
<;metal:define slot define slot="content"/>;
<;/body>;
<;/html>;
<;/metal:define macro>;
并添加到configure.zcml中(始终假设您调用了宏
main.pt):
<;pycms:macro
name="body"
ptfile="yourpackage:templates/main.pt"
/>;
页面只是带有
文本的东西。没什么大不了的。您可能需要创建自己的内容类型,
操作等。幸运的是,这并不难做到。最好的方法是查看
现有代码…无论如何,这里有一些例子:
actions
----
当前使用的设置
主要使用"透视"或查看内容的方式。在
管理界面中,它们被呈现为"选项卡"。使用zcml配置操作。使用操作语句如下:
<;pycms:action
name="users"
target="./users"
category="perspective"
ctype="site"
/>;
ctype是一个可选筛选器。
content types
----
您可以使用:
<;pycms:ctype
name="your廑type廑id"
factory=".models.yourtype.yourtype"
subtype="someothertype,someeventhertype"
icon="/static/img/yourtype廑icon.png"
/>;向您的类型注册图标、
您的实际型号应该扩展
w20e.pycms.models.base.basecontent
或
w20e.pycms.models.base.basefolder。
您可以
创建一个描述您的模型的xml表单,或者如果您坚持让
做一些更像pythonic的事情,则可以通过编程方式创建您的表单。签出w20e.forms以获取详细信息。
一个简单的模型如下:
from w20e.pycms.model s.base import basecontent
Class somethingSimple(basecontent):
"实际上它更像一个‘对象’…"
def初始(self,content\u id,data=none):
basecontent.\uu初始(self,content\u id,数据)
def base_u id(self):
默认情况下,pycms在<;您的包
home>;/forms/<;content type>;.xml中查找文件,因此在本例中:
<;package home>;/forms/somethingsimple.xml
如果您想要完全不同的内容,请为提供表单的
内容类型配置适配器。工厂:
<;适配器
factory=".your.factory"
用于".your.content.type"
提供"w20e.forms.interfaces.iFormFactory"/>;
并确保它实际实现了iformactory,并且可以创建
表单(w20e.forms.interfaces.iform)。
natures
----
定义内容类型的另一种方法是定义"natures"。让我们面对现实:一个事件有什么特别之处?这真的只是一个有开始和结束日期和位置的页面,不是吗?新闻是什么?这不是很像一页吗?如果你同意,
请继续阅读……
这就是自然。您可以这样注册自然:
<;pycms:nature
name="event"
interface="w20e.pycms_events.interfaces.ievent"
/>;
这将使自然显示在"自然"下拉菜单中。现在
您可以这样离开它,也可以使用w20e.forms.interfaces.iformmodifier实现来修改
页的表单:
<;订阅服务器
for="w20e.pycms_events.interfaces.ievent"
factory="w20e.pycms_events.models.event.event"
提供"w20e.forms.interfaces.iformmodifier"
/>;
,并按照以下行创建一个类事件:
from zope.interface import implements
从w20e.forms.interfaces导入iform,iformmodifier
从w20e.forms.data.field导入field
从w20e.forms.model.fieldproperties导入fieldproperties
从w20e.forms.rendering.control导入input
从w20e.forms.rendering.group导入flowgroup
事件(对象):form.data.addfield(field("end"))
form.data.addfield(field("location"))
extra_classes="datetime",
bind="start"))
grp.addrenderable(输入("end","end of event",bind="end"))
grp.addrenderable(输入("location","location",bind="location"))
form.view.addrenderable(grp,pos=-1)
或者您认为应该添加到页面表单中的任何内容…
default robots.txt允许所有操作。根据您的喜欢…
search
----
是否要为您的网站启用搜索?
将此添加到您的configure.zcml中:
<;include package="w20e.pycms"file="search.zcml"/>;
----
是否要为站点启用搜索?
将其添加到您的configure.zcml中:
<;include package="w20e.pycms_sharing"/>;
这是设置依赖项(不要忘记运行构建):
settings
--
pycms.acl.force_new=true false
强制新版本的acl。所有安全数据都将丢失
pycms.catalog.force_new=true false
强制新版本的目录。您的所有条目都将丢失,但您可以运行reindex catalog,一切都会好起来…
pycms.admin用户=<;用户>;<;pwd>;
管理员用户和密码,如:pycms.admin用户=管理员:pipo
pycms.admin机密=<;somesecret>;
此机密可用作获取管理权限的url参数
明智地使用它!
pycms.minify_css=true false
缩小css。默认为false
pycms.minify_js=true false
minify js。默认值为False
pycms.logged_-in_redirect=<;url>;
pycms.rootClass=<;full dotted classname>;
默认值为w20e.pycms.models.site.site
pycms.rootTitle=<;string>;
默认为"欢迎"
pycms.from_addr
发送电子邮件为…
pycms.bcc_addr
也发送到bcc
pycms.after_add_redirect
成功添加后要去哪里
pycms.cancel_add_redirect
添加
pycms.after_del_u redirect
删除后的去向
pycms.tempregister.timout=<;int>;
删除临时对象前的最小秒数
<1.1.2a
----
*pycms内容类型的json表示
*升级jquery+jqueryui
*小补丁
>1.1.1a
----
*最初创建的对象将有一个临时状态,直到它们完成
*现在在基本视图类中添加宏,因此,更容易覆盖
*validation.js修复了引导类名
<1.0.2a
=
*最后我们有了一个严重的(?)许可证。还更新了一些元数据。
1.0.1a
==
*启用了通过基本视图呈现viewlet的调用