[译]:Orchard网站定制——定制主题

返回目录索引
原文链接:Customizing Themes

Orchard中的默认主题叫 The Theme Machine 。它被设计为多功能的,可以从它来进行定制和开发主题。

本文将介绍主题 The Theme Machine 以及示范如何通过自定义The Theme Machine的样式表(Site.css)来创建自己的主题。

The Theme Machine主题介绍

The Theme Machine为主题设计提供了灵活且强大的基础。下图是它的文件结构:

The Theme Machine中的核心文件是布局页面(Layout.cshtml)和样式表(Site.css)。

布局页面概览

布局页面定义多个区域。每个区域都有一个条件语句,所以只有当它含有内容时,他才会呈现出来。如果区域内没有提供内容,显示的页面将不会包含这个区域。下图为布局中的区域:

All the zones in The Theme Machine

注:官方文档此处本有一个示例来展示各个区域部分,但给出的示例链接已经失效,故此处给出官方的Demo网站:Try Orchard

关于区域的内容则在控制面板中进行添加。

CSS样式概览

The Theme Machine的样式表(Site.css)提供了大量的样式用于更详细的控制网站的外观。样式表中对样式进行了分组,以便于你自定义时更容易地定位样式。下表显示了分组情况以及相应类型样式的描述:

分组-Grouping 描述-Description
General 包含 body, headings, lists, 和 text elements部分的默认样式。
Forms 包含与HTML表单有关的样式,如form, legend, fieldset, label, 和 input
Structure 包含The Theme Machine中页面布局的每个区域的样式定义
Main 包含blog posts, comments, tagged search, 和 search results的样式定义
Secondary 包含aside zones, tripel zones, 和 footer quad zones 部分内的额外布局样式。
Widgets 包含选定部件的样式,如 search widget, edit-mode widgets, 和 content mode.
Pager 包含与页面形状有关的样式。
Misc 包含其他杂项样式,如:small, large, quiet, 和 highlight.

创建自主题

你可以通过自定义The Theme Machine来创建自己的样式。但是,你最好不要直接编辑The Theme Machine的文件。取而代之,你应该创建一个子主题,然后将你想要修改的文件拷贝到子主题中。你不必将不准备修改的内容拷贝过来 —— 子主题继承父主题,并且只会覆盖你自定义的内容。当你将子主题作为当前主题时,Orchard首先查找当前主题文件,如果没有找到,然后去查找父级主题(BaseTheme)——甚至你的每一个父主题还可以有自己的父主题,系统会一层一层查。

创建子主题步骤如下:

  1. 用command-line CodeGen工具生成子主题代码结构
  2. 从The Theme Machine主题中拷贝需要修改的内容到子主题
  3. 编辑子主题的文件
  4. 应用新主题到网站

生成主题结构

要为新主题生成代码结构,我们会用到 Code Generation 功能 —— 在控制面板中点击模块就可以看到此功能包含在功能标签下。一旦启用code generation功能后,就可以在Orchard中用命令行生成新主题了。关于更多命令行的内容见:原文:Using the command-line interface译文:使用命令行界面

打开Orchard命令行工具,然后输入以下命令 :

codegen theme MyTheme /BasedOn:TheThemeMachine

如果你要使用Visual Studio来编辑(或你想让你的主题最终含有代码文件),你或许需要指定CreateProjectIncludeInSolution选项,命令如下:

codegen theme MyTheme /BasedOn:TheThemeMachine /CreateProject:true /IncludeInSolution:true

上述命令告诉Orchard创建新主题的代码结构,并将主题名称设为 MyTheme, 并指明其父主题为 TheThemeMachine。最终CodeGen命令将生成如下文件结构:

其中只创建了Theme.txt和Views\Web.config文件。控制面板通过Theme.txt文件(主题清单)来查询信息,如主题名称。这里面同样制定了父主题。 Web.config是ASP.NET MVC渲染Views文件夹中页面所需的配置文件。你几乎不需要修改Web.config文件。

从The Theme Machine中拷贝文件

为了让示例较为简单,你只需要自定义 Site.css 文件。从TheThemeMachine\Styles文件夹中将Site.css文件拷贝到MyTheme\Styles文件夹中。

你还需要拷贝TheThemeMachine\Views\Layout.cshtml文件到MyTheme\Views文件夹中。——新版本中,此步骤非必需。

自定义主题文件

在你将要修改的文件拷贝到新主题文件夹后,你就可以进行修改了。你也可以按需创建一些新文件。在本示例中,我们仅仅修改页面的背景颜色。

在拷贝过来的 Site.css 文件中,查找General部分的body样式。然后,将背景颜色从**#fff修改为#fff8dc**,代码如下:

body { 
  font-size: 81.3%;
  color: #434343;
  background: #fff8dc; 
  font-family: Tahoma, "Helvetica Neue", Arial, Helvetica, sans-serif;
}

至此,背景颜色将修改为玉米丝色-cornsilk——淡黄色。

你也可以在主题的根文件夹下为新主题添加一个缩略图。其名称必须为Theme.png。此图片会在控制面板中显示,以便于用户选择主题。

下图为从TheThemeMachine拷贝的图片,然后将 背景色调为淡黄色:

应用新主题

在控制面板中,点击主题,切换到已安装标签。在已安装标签下,将会在可用下面显示新主题。:

点击设为当前已安装标签会刷新显示——MyTheme显示为当前主题。

至此,新主题已经在网站中使用。


译:奇葩史

[译]:Orchard网站内容管理——创建自定义内容类型

返回目录索引
原文链接:Creating Custom Content Types

尽管Orchard默认提供了Page和Blog Post内容类型,但是,在控制面板中,我们仍然可以很容易的创建自定义的内容类型(或者扩展已有内容类型的定义)。默认情况下,内容定义功能模块是启用的——创建自定义内容类型,此功能必须启用。如果没有启用,可以在模板-功能界面手动启用它。

要创建内容类型,在控制面板中,点击内容定义,选择内容类型标签。

在此界面中,你可以看到系统中可用的内容类型。注意:此处有些类型可以直接在此处创建内容项或查看内容项列表(如Page类型),而其他的则只能在此编辑内容类型定义(如Comments和Widgets,由于它们有专门的/定制的管理界面来创建和列举内容项)。

由于官网图片名称大小写有误,无法显示,此处修改

点击Page类型里的项目列表可以查看网站的Page类型内容项列表——界面类似管理内容界面。

你也可以点击Page类型的编辑链接来修改Page类型的定义。

Orchard中的内容类型由字段和元件组成,关于那些基本概念的概述见:原文:Basic Orchard Concepts。字段是类型中的一些定制内容,如:Product类型可能会需要SKU和Price字段。元件则用于可以在一个或多个类型中重复使用的部分。例如:Autoroute元件为类型提供使用链接地址访问内容的功能。 从某种意义上讲,你可以将类型理解为 含有字段的,并由一个或多个部件组成的一个东西。事实上,反应到代码层面也是一样。 如果你需要处理博文为Autoroute部件并访问其Slug属性,你可能需要写如下代码:post.As<AutoroutePart>.Slug 。幸运的是,你现在不必编写代码来查看处理类型和部件。我们将在下一节通过更详细的例子来介绍这一点。

定义一个新的内容类型

下面准备定义一个自定义内容类型。假设你定义一个Event类型,用于列举活动(包括地点和日期字段)。首先,点击内容定义进入内容类型界面,点击创建新类型

输入类型名称 Event内容类型Id字段可以保持使用自动填写的 Event

点击 添加字段-Add 添加字段

现在Orchard只有一个字段类型(TextField),但在Orchard中还有许多扩展类型(如CheckBoxField, EmailField, TextAreaField, DateTimeField 等),详细内容见:原文:Creating-a-custom-field-type。同时在模块里的库中还提供了大量的额外字段类型可供下载。

下面在字段名称中输入 Location ,并点击保存

现在可以看到字段显示在Event类型字段列表中了。

重复以上步骤添加字段 Date

现在给类型添加元件,在Event类型中点击添加元件

然后你可以看到当前版本的Orchard中可用的元件。对于我们的Event类型,我们添加 Comments 元件(允许评论event),Tags 元件(可以为event打标签),Autoroute 元件(可以通过前台url地址访问),Menu 元件(可以将event添加到主菜单)以及PublishLater 元件(允许event立即发布,稍后发布或保存为草稿)。

另外还要添加 “Common” 元件,那样你的内容项可以显示在内容项列表中。

类型、字段和元件都可以有自己的设置。字段和元件的特有的设置由Orchard中的功能来决定。如果我们启用Indexing功能,类型设置上会出现Index this content type for search的设置,并且在每个字段上会有设置项Include in the index。勾选Event类型中Location字段上的选项,这样讲会允许用户在前台通过location来搜索内容(Search功能需要启用)。最后记得点击保存。

现在我们已经完成了自定义内容类型的定义。下面我们为其创建内容项。可以在内容定义-内容类型界面看到新建Event链接。

同样,在控制面板的新建菜单下也有Event类型。点击效果与上面一样(二选一)。

我们可以在Event类型的编辑页面,看到所有我们定义的字段和元件。其中有TitleAutoroutePart元件,包含TitlePartPermalink),有Location字段,还有 Tags 输入框(Tags元件),显示到主菜单-Show on main menu 勾选框(Menu元件),是否允许评论勾选框(Comments元件),以及现在发布-Publish Now, 稍后发布-Publish Later保存草稿-Save As DraftPublish Later 元件)。填写完成后下一步发布活动。

点击Orchard控制面板中的内容,我们可以看到添加的event内容项出现在列表项中。

在网站的前台页面中,event正如预期的一样,被添加到了主菜单中,同时所有的字段和元件都得以正确显示。

我们可以自定义event的显示方式,并将其模板化。关于此的更多内容见:原文:Template File Syntax Guide

下面我们可以测试下新类型的搜索功能。首先保证你在模块-功能界面启用了Indexing, SearchLucene 功能。然后访问搜索索引-Search Index 页面查看有哪些可用字段有索引。你应该可以在索引字段列表中看到event-location字段(如果没有,重建索引即可)。

我们可以在设置管理界面将字段添加到搜索设置中,以此让搜索功能可以通过查询此字段查找内容。

在前台界面输入可以匹配活动地址的关键字。

系统会通过搜索地址字段的索引,然后展示搜索结果。

至此本教程结束。


译:奇葩史

[译]:Orchard网站内容管理——草稿发布

返回目录索引
原文链接:Publishing Drafts

Orchard支持将页面保存为草稿或将其发布到网站。当你发布一个页面时,你可以选择立即发布或者指定某一个时间点发布。页面的保存和发布选项在 新Page 页面的最底端。

保存为草稿选项

当你需要保持一个页面,但又不想网站访问者看到这个页面,你就可以将其保存为草稿。你后续可以继续修改其内容直到你想发布它。在 管理内容 页面,你可以看到已被保存为草稿的页面。

草稿显示为未发布状态,你可以点击发布、修改,以及删除链接。点击发布链接将会立即将草稿发布到网站,网站访问用户将立即可以看到此内容。

现在发布选项

想立即发布一个页面,则点击现在发布。要发布一个草稿页面,则在管理内容页面点击发布链接。在管理内容页面,你也可以看到已发布的内容。

你可以点击查看、取消发布、编辑以及删除链接来操作页面。点击取消发布后,页面将变为一个草稿。

稍后发布选项

你可以为一个页面设置一个未来的日期时间,然后点击稍后发布选项,以此来让页面在一个特定时间发布。

页面在设置的发布日期时间前,将作为草稿存储。你不需要再做其他的操作来发布页面。

你可以在管理内容页面看到页面草稿所设置的发布日期时间。


译:奇葩史

关于Visual Studio单元测试项目中Console使用和WinForm相关问题

问题来源:个人想给单元测试添加用户输入,即添加Console.ReadLine()。但vs的单元测试中并不会显示控制台窗口。

解决方案:

1、关于Console.WriteLine——要查看输出,无法直接查看,只能在运行结束后查看,查看方式如下:

output

点击图中的“输出”或者在测试资源管理器中点击“输出”

testoutput

 

2、 想在“输出窗口”查看输出结果,将Console改为System.Diagnostics.Trace或System.Diagnostics.Debug,即如下:

经测试,需要在调试模式下才会在输出窗口看到内容,此时Console同样有效

System.Diagnostics.Debug.WriteLine("输出");
System.Diagnostics.Trace.WriteLine("输出");

 

3、关于输入Console.ReadLine,未找到合适解决方案,最终使用添加Form窗体来进行输入处理。

但是,使用form窗体时,在运行情况下,窗体可以显示,调试时窗体会显示不出来。

解决方案:将窗体的ShowInTaskbar属性改为false即可