编辑任何HTML片段的简单方法

ice.adverlet的Python项目详细描述


教育学=
冰.adverlet
============ < BR>
内容: < BR> 用法 [谚] < BR>
这个包-对于基于zope3的站点-提供了一种简单的编辑方法
任何HTML片段。它包括所见即所得编辑器、撤消支持和
图像存储。 < BR>
可能使用的示例包括:广告portlet,
通知、页脚、首页等。 < BR>
包提供zcml指令"adverlet"和tales
表达式"adverlet"。 < BR>
要使用该软件包,请遵循以下6个简单步骤: < BR>
1)包括包装: < BR>
<;include package="ice.adverlet"file="meta.zcml"/&;gt;
<;包含package="ice.adverlet"/&;gt; < BR>
2)在zcml配置文件中为
示例: < BR>
<;冰:adverlet name="top"/&;gt; < BR>
<;冰:adverlet
name="底部"
description="这是FrontPage底部的广告"
/&;gt; < BR>
<;冰:adverlet
name="页脚"
description="网站页脚"
default="默认页脚"
所见即所得="假"
/&;gt; < BR> 注意事项:
`name`-必需。
"说明"-不需要。
`默认值'-不需要,它是浏览器视图的名称,已注册B
zcml指令,如browser:page。
"所见即所得"不是必需的。默认情况下为此定义使用富文本编辑器
管理界面中的adverlet。用户(管理员)可以在表单中更改此项。
默认值为true。 < BR>
3)将"adverlet"故事表达方式写在皮肤上: < BR>
<;div tal:content="structure adverlet:top"/&;gt; < BR>
其中"top"是adverlet的名称。 < BR>
4)包提供了一个视图来管理所有注册的adverlet。
此视图可能由特殊内容提供商调用
任何页面: < BR>
<;div tal:content="结构提供程序:ice.adverlet.manage"/&;gt; < BR>
5)此内容提供商具有"ice.adverlet.manage"权限。
因此,您需要将此权限授予
项目,并允许此用户"撤消",例如: < BR>
<;授予permission="ice.adverlet.manage"role="foo.blah.blah"/&;gt;
<;授予权限="zope.undownTransactions"role="foo.blah.blah"/&;gt; < BR>
6)安装并注册2个本地实用程序: < BR>
1。工厂-ice.adverlet.storage.sourcestorage;
接口-ice.adverlet.interfaces.isourcestorage;
名称-空。
(进入本地站点经理) < BR>< > 2。工厂-ice.adverlet.storage.filestorage;
接口-ice.adverlet.interfaces.ifilestorage;
名称-空。
(进入本地站点) < BR>
就这样。 < BR>
n.b.您可以为管理用户界面定义自己的模板。
为此,请查看ice/adverlet/browser/template
并在项目中为自己的模板编写自己的适配器。 < BR>
您需要: < BR>
-更改@adapter(icontentprovider,idefaultbrowserlayer)
到@adapter(icontentprovider,imycustomlayer)
-用相同的名称注册此适配器
(查看ice/adverlet/browser/configure.zcml,
部分<;!--模板-->;) < BR>
n.b.此外,您可以使用默认模板,但不能使用默认css
管理界面。为此,请在zmi"settings"表单中查找
ice.adverlet.storage.sourcestorage本地实用程序或定义属性
`defaultcss=false`在安装工具代码中。 < BR>< BR>试验 [谚] < BR>
>>gt;导入zope.interface
>>>导入zope.component < BR>
让我们为一个adverlet注册一个默认视图: < BR>
>>gt;导入操作系统,tempfile
>;>;temp_dir=tempfile.mkdtemp()
>;>;templatefilename=os.path.join(temp_dir,'default_footer.pt') < BR>gt;gt;gt;打开(templatefilename,'w')。写入(''
&;lt;h1>;默认页脚<;h1>;
…'') < BR>
>;>>来自zope.publisher.interfaces导入浏览器
>;>>来自zope.app.pagetemplate import simpleview类
>>gt;默认视图类=SimpleViewClass.SimpleViewClass(
…templatefilename,name='default-footer') < BR>
>>>带状组件提供适配器(
…默认视图类,
…(zope.interface.interface,browser.idefaultbrowserlayer)界面,
…zope.interface.interface界面,
…name=默认页脚'
…) < BR>
让我们注册几个广告: < BR>
>>gt;从zope.configuration导入xmlconfig
>>gt;进口冰块。adverlet
>>>context=xmlconfig.file('meta.zcml',ice.adverlet) < BR>
>>gt;context=xmlconfig.string('''
…&;lt;配置
…xmlns="http://namespaces.zope.org/zope"
…xmlns:ice="http://namespaces.zope.org/ice"
…i18n_domain="测试">;

…<;冰:adverlet
…name="FrontPage"
…/&;gt;

…<;冰:adverlet
…name="页脚"
…description="网站页脚"
…default="默认页脚"
…/&;gt;

…&;lt;/配置&;gt;'',上下文) < BR>
现在我们可以尝试在任何视图中调用这些adverlet:: < BR>
>;>;templatefilename=os.path.join(temp_dir,'template.pt')
>>gt;打开(模板文件名,"w")。写入(''
&;lt;HTML&;gt;
&;lt;正文>;
&;lt;div tal:content="structure adverlet:frontpage"/&;gt;
&;lt;div tal:content="structure adverlet:footer"/&;gt;
&;lt;/正文&;gt;
&;lt;HTML&;gt;
…'') < BR>
>;>;pageClass=simpleview类.simpleview类(
…templatefilename,name='index.html') < BR>
>>>带状组件提供适配器(
…PageClass
…(zope.interface.interface,browser.idefaultbrowserlayer)界面,
…zope.interface.interface界面,
…name='index.html'
…) < BR>
>;>>来自zope.publisher.browser导入测试请求
>;>;请求=测试请求() < BR>
>;>;类内容(对象):
…zope.interface.implements(zope.interface.interface)
>;>;内容=内容() < BR>
>;>;视图=zope.component.getMultiAdapter(
…(content,request),name='index.html') < BR>
>;>>打印视图().strip()
<;HTML>;
<;正文>;
<;分区>;lt;分区>;
<;分区>;
<;h1>;默认页脚<;h1>;
<;分区>;
<;正文>;
<;html>;
<;空行>; < BR>
要编辑adverlets存储html源: < BR>
>;>>来自ice.adverlet.storage导入源存储
>>gt;从ice.adverlet.interfaces导入ISourcestorage < BR>
>>gt;存储=源存储()
>>>isourcestorage.providedby(存储) 真的 < BR>
>>>存储源["FrontPage"]=u''
…&;lt;H2&;gt;&;lt;A
ref="http://launchpad.net&;gt;启动板<;a&;gt;<;h2&;gt;
……''
>>>存储源["页脚"]=u''
…<;h3&;gt;lt;a href="http://ohloh.net&;gt;ohloh<;/a&;gt;lt;/h3&;gt;
……'' < BR>
并将存储注册为实用程序: < BR>
>>gt;Zope.组件。提供功能(存储、ISourcestorage) < BR>
让我们现在检查测试视图: < BR>< BR>>>>>打印视图().strip()
<;HTML>;
<;正文>;
<;分区>;
<;h2&;gt;lt;a href="http://launchpad.net&;gt;launchpad&;lt;/a&;gt;<;/h2&;gt;
<;分区>;
<;分区>;
<;h3&;gt;lt;a href="http://ohloh.net&;gt;ohloh<;/a&;gt;lt;/h3&;gt;
<;分区>;
<;正文>;
<;html>;
<;空行>; < BR>
然后我们将测试图像存储和图像包装器。
为此,让我们为文件注册存储: < BR>
>;>>来自ice.adverlet.storage导入文件存储
>;>>来自ice.adverlet.interfaces import ifilestorage < BR>
>>gt;文件=文件存储()
>>>ifilestorage.providedby(文件) 真的 < BR>
>>gt;zope.component.provideUtility(文件,iFileStore) < BR>
让我们尝试使用图像包装器将图像存储在此存储中: < BR>
>;>>来自ice.adverlet.image import imagewrapper
>>gt;从ice.adverlet.interfaces导入iImageWrapper < BR>
>>>包装器=图像包装器()
>>>iImageWrapper.ProvidedBy(包装器) 真的 < BR>
DublinCore的注册适配器: < BR>
>;>>来自zope.dublincore.annotatalabeladapter import zdcannotatalabeladapter
>;>>从zope.dublincore.interfaces导入izopedublincore
>>>>来自zope.annotation.interfaces import iattributeanotatable
>;>>来自zope.app.file.image import image < BR>
>>gt;zope.interface.ClassImplements(图像,IAttributeTanotatable) < BR>
>>>带状组件提供适配器(
…工厂=zdcannotatableadapter,
…提供=izopedublincore,
…适配器=(IAttributeTanotatable,)
…) < BR>
我们使用测试图像: < BR>
>;>>从ice.adverlet.tests.tests导入zptlogo
>>>包装器.data=zptlogo
>>>wrapper.description=U'徽标图像' < BR>
现在让我们检查文件存储: < BR>
>;>;[key for key in files.keys()]
[u'image'] < BR>
>;>gt;[izopedublincore(file).files.values()中文件的标题]
[u'logo image'] < BR>
请注意,在管理ui中,我们使用命名为global utilities iadverlet的
用于存储HTML而不是直接使用存储。让我们测试
此功能: < BR>
>>gt;存储源["FrontPage"]
u'\n<;h2>&;lt;a
ref="http://launchpad.net&;gt;启动板<;a&;gt;<;/h2&;gt;\n" < BR>
>;>>来自ice.adverlet.interfaces import iadverlet
>;>;frontpage=zope.component.getutility(iadverlet,"frontpage") < BR>
>;>;frontpage.source='<;h2&;gt;您好<;h2&;gt;' < BR>
>>gt;存储源["FrontPage"]
"你好"<;h2>;<;h2>;' < BR>
让我们再次检查adverlet: < BR>
>;>>FrontPage.source
"你好"<;h2>;<;h2>;' < BR>
我们为修改源提供事件: < BR>
>;>;事件=[]
>>gt;zope.component.providedhandler(events.append,(none,)) < BR>
>;>frontpage.source=''<;h2>;欢迎使用!
…您在这里。<;h2>;
……'' < BR>
>>>事件
[<;ice.adverlet.events.sourcemodifiedvent实例位于…&;gt;] < BR>
事件保存全局"adverlet"实用程序的名称: < BR>
>;>>事件[0].name
U"首页" < BR>
再次查找测试浏览器类: < BR>
>;>>打印视图().strip()
<;HTML>;
<;正文>;
<;div&;gt;lt;h2>;欢迎啊!
您在这里。<;h2>;
<;分区>;
<;分区>;
<;h3&;gt;lt;a href="http://ohloh.net&;gt;ohloh<;/a&;gt;lt;/h3&;gt;
<;分区>;
<;正文>;
<;html>;
<;空行>; < BR>
让我们测试"newlines"参数: < BR>
>>>frontpage.newlines=true < BR>
>;>>打印视图().strip()
<;HTML>;
<;正文>;
<;div>;lt;h2>;欢迎!
<;br/>;您就在这里。&;lt;h2&;gt;
<;br/>;<;br/>;<;div>;
<;分区>;
<;h3&;gt;lt;a href="http://ohloh.net&;gt;ohloh<;/a&;gt;lt;/h3&;gt;
<;分区>;
<;正文>;
<;html>;
<;空行>; < BR>
清理: < BR>
>>gt;进口关闭
>>gt;shutil.rmtree(温度目录) < BR>< BR>
===参考文献====
演示站点
===参考文献==== < BR>
要查看演示,请执行以下步骤: < BR>
1)在setup.py文件中,您的项目写入: < BR>
安装需要=[…'ice.adverlet',…] < BR>
2)在项目的configure.zcml中写入: < BR>
<;包含package="ice.adverlet.demo"/>; < BR> 运行zope实例,在zmi中添加"demo site",转到该站点,查看"demo" < BR>
演示站点定义了4个adverlet:header、main、footer和sidebar。
"header"、"main"和"footer"adverlet有默认视图
(查看demo/app.zcml)。
因此,有用户:登录-`demo',密码-`demo'。 < BR>
其他方式:从下载tar-archive
http://pypi.python.org/pypi/ice.adverlet
或http://launchpad.net/ice.adverlet/
并运行buildout。 < BR>< BR>
==参考文献====
更改
==参考文献==== < BR>
版本0.2.3(2008-12-22)
< BR>
-修复了图像容器名称选择器中以千克为单位的错误 < BR>< BR>
版本0.2.2(2008-08-04)
< BR>
-更方便的adverlets-列表
-更改默认样式表 < BR>
版本0.2.1(2008-08-01)
< BR>
表单状态 < BR>< BR>
版本0.2.0(2008-07-25)
< BR>
-两种模式:富文本编辑器或简单文本区域
-"简单模式"的"呈现换行符"字段
-`对管理用户界面使用默认css`系统参数
-`upload`表单和图像列表现在位于同一URL中
-更正表单中的重定向(不在操作处理程序中,但
在"update"方法中)。
-从ui管理中删除了"使用默认视图"列
-使用demo的demo principal代替zope.anonymous
重建或希腊项目 < BR>
向后兼容性:是的,感谢fieldproperty。 < BR>< BR>
版本0.1.1(2008-07-19)
< BR>
-正确的鸡蛋-信息 < BR>< BR>
版本0.1.0(2008-07-19)
< BR>
-初次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
datetime如何使用JodaTime在Java中设置时间属性   java固定算法的性能时间   java如何从JMenu中获取所选项以更改文本区域的文本颜色?   java配置单元UDF传递数组<string>作为参数   javaapachebeam和BigQuery   java与PrintWriter之间的差异。printf和PrintWriter。格式方法   继承如何处理按Java版本更改的导入,以及在多个版本上编译   xml java。lang.noClassDefFoundant生成错误   java如何使用包含映射的JSON发送POST请求?   java如何在任何应用程序的JAR文件中绑定MySql数据库?   Java脚本解释器   sslhttpclientjava。网SocketException:未实现未连接的socket   java如何为Android应用程序创建类似于Cron作业的东西   java JButton+radiobox+复选框   java内存管理将文件写入内存   java这是计算对象实例的有效方法吗?   用于死锁情况的java代码?   JavaSpring容器作为新实体插入,而不是存储在表中