选择ProcessWire作为下一个CMS的4个理由

几周前,我偶然发现了A List Apart文章,标题为“管理内容管理系统” 。 它提供了有关如何在内容管理系统(CMS)后端中限制和调整用户自由的建议,以使其尽可能易于使用。

阅读这些建议,并将其与当前CMS领域主要参与者的技术可能性进行比较,我看到了很多限制。 这些CMS中的大多数根本不具备这些功能,并且无法提供理想地自定义后端用户界面的选项级别。 但是,与ProcessWire一起工作了几年,我想我已经找到了那些确实希望这样做的开发者和用户庇护所。

ProcessWire网站的屏幕截图

ProcessWire是一个新兴的,免费的开源 PHP CMS和内容管理框架(CMF)。 它的本质是基于一些简单的概念,并且提供了超级易用且功能强大的工具。 在本概述文章中,我想向您介绍其中一些工具和概念。 这是选择ProcessWire作为下一个CMS的四个原因。

1.它基于三个简单的核心概念:页面,字段和模板

数据的输入和输出仅基于三个核心概念,仅此而已。 这意味着,一旦您理解了这些概念,便基本了解了有关ProcessWire的所有知识及其背后的原理 。 很酷吧? 因此,让我向您介绍页面字段模板

页数

在ProcessWire安装的起始页面上,您会看到一个单独的分层页面树:

ProcessWire安装

您在树中看到的链接称为页面 。 后端中的页面通常反映在前端中看到的页面。 例如,可以通过打开your-domain.com/about/在前端访问屏幕快照中的“关于”页面。

但是页面不必在前端有对应的页面。 它们也可以简单地存在于后端中,并用作其他页面的数据容器。 让您刚刚读过的句子陷入:仅后端中可用的页面的概念非常强大,因为它为如何构建网站以及与输入数据进行交互提供了无限可能。

您可以并且应该将页面用于几乎所有内容。 例如,您可以有一个隐藏的设置页,您可以在其中保存诸如主导航之类的内容或诸如网站名称,标语,版权声明等一般文本。 另一个示例是博客文章的标签和类别(相当于WordPress中的分类法)。 您只需为博客文章的每个标签或类别创建页面。 让我引用Joss Sanglier关于ProcessWire中的页面的信息:

ProcessWire中的页面用于各种事物。 它们可以用作页面列表中的标记。 它们可以用作其他页面的组父。 它们可以用作类别,标签或列表或用户。 它们甚至可以用于简单的下拉选择-仅提供标签和值。

让我们打开并编辑上述“关于”页面。

关于页面

现在,您正在研究ProcessWire的下一个核心概念:字段。

领域

页面包含字段 。 但是必须从两个不同的角度看待领域。 从表面上看,它们是页面的一部分,因为当您打开页面时,会看到可以使用的字段。 从技术上讲,这些字段是页面模板的一部分。 稍后我将描述模板的概念; 让我们先了解一下领域。

ProcessWire中的字段是您用来放置数据或从中选择数据的容器,例如文本,文本区域,数字,电子邮件,文件上传,其他页面等。这完全取决于您页面中包含多少个字段。 它只能有一个(例如,页面标题的字段),也可以没有任何字段(不太方便),也可以有50或100个以上的字段。

ProcessWire不像WordPress那样具有自定义字段的概念,因为ProcessWire中的每个字段都是一个自定义字段 。 您创建一个字段并确定所需的类型(请参见下面的屏幕截图)。 而已!

ProcessWire字段

可以为字段提供标签,描述和一些注释,以显示字段下方的其他信息。 每种字段类型都有自己的设置。 让我们看一下三种字段类型和一些可以进行设置的设置:

  • Textarea字段类型:您可以决定将其呈现为纯文本区域还是富文本格式的编辑器(默认为CKEditor)。 您可以决定哪些按钮应出现在CKEditor工具栏中,甚至可以直接在管理GUI中输入自定义配置选项。
  • 页面字段类型:您可以将一个页面链接到另一页面,从而在它们之间创建关系。 您可以链接一个页面(一对一关系)或多个页面(一对多关系)。 您甚至可以允许从页面字段中创建新页面。
  • 图像字段类型:您可以指定可以上传的图像类型(扩展名)。 您可以指定上传必须具备的最小或最大高度和宽度。

底线是:您创建的每个字段都是高度可定制的,以完全满足您的需求以及下面创建和编辑内容的人员的需求。

但是页面如何知道页面本身具有哪些字段? 因此,让我们看一下模板。

范本

创建新页面时,必须选择一个模板 。 该模板包含页面需要了解的有关其内容的所有信息(页面具有哪些字段,如何呈现这些字段以及它们的行为)。

在下面,您可以看到模板basic-page的字段。

ProcessWrite模板

单击一个字段将打开一个模式窗口,您可以在其中精确地为该模板修改该字段的设置。

ProcessWire临时属性

模板可以具有与之关联的同名物理PHP文件。 这些模板文件位于/site/templates/ 。 在这样的文件中,您编写PHP代码和HTML标记,最终输出页面内容并呈现访问者在您的网站页面上看到的元素。

如果模板没有这样的对应文件,则与其关联的页面将无法独立呈现在前端。 这并不意味着您无法获取该页面的数据并将其输出到其他地方-您可以通过使用另一页面的现有模板文件来做到这一点。

让我们总结一下页面,字段和模板之间的技术关系:在模板中添加字段,并在创建新页面时选择模板。 编辑页面时看到的字段是您添加到所选模板的字段。

2.它有一个可以爱上的API

在你的模板文件中的代码将主要由一些基本的PHP构造像分配给变量, if条件foreach循环和HTML标记,一方面,并与工作ProcessWire的API ,另一方面。

您可以将API视为PHP的jQuery。 它提供方法,选择器,链接(流利接口)和遍历功能。

对于ProcessWire,API可能是令我最惊奇的一件事:它易于使用,易于理解,富有表现力且功能强大。 但是最重​​要的是,它使您能够以快速,简单的方式进行开发,并且与它进行交互确实很有趣 。 这很有意义。

API备忘单是一个很好的参考。 它显示了您可以使用的所有可用方法。

ProcessWire API

现在,让我向您介绍在模板开发期间将要处理的两个API变量: $page$pages

$ page变量

$page变量包含特定于正在查看的页面的所有字段。 这包括所有页面共有的内置字段,以及仅此一页独有的字段。

但是如何访问页面的字段? 让我们通过一些简单的例子来深入研究。

输出名为title的文本字段的内容:

echo $page->get("title");
// or
echo $page->title;

显示页面模板的名称:

echo "This page is using the template: " . $page->template->name;
// or
echo "This page is using the template: {$page->template->name}";

生成面包屑导航:

echo "<ul>";
foreach ($page->parents as $parent) 
    echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>";
echo "</ul>";

2.5.27版本开始,您还可以编写以下内容:

echo "<ul>";
echo $page->parents->each("<li><a href='{url}'>{title}</a></li>");
echo "</ul>";

仅在实际上传图像时输出图像:

if ($page->image) echo "<img src='{$page->image->url}'>";

注意:您必须将“图像”字段设置为仅包含一张图像,此功能才能起作用。

以下是将图像字段设置为包含多个图像时的一些示例。

抓取并输出第一个图像:

$image = $page->images->first();

if ($image) echo "<img src='{$image->url}'>";

抓取并输出随机图像:

$image = $page->images->getRandom();

if ($image) echo "<img src='{$image->url}'>";

循环浏览所有图像,创建具有比例高度的500像素宽度的大图像,以及具有特定质量和裁剪设置的100×100的缩略图,然后将缩略图链接到大型版本:

$options = array(
    "quality" => 90,
    "cropping" => "southeast"
);

foreach ($page->images as $image) {
    $large = $image->width(500);
    $thumb = $image->size(100, 100, $options);
    echo "<a href='{$large->url}'><img src='{$thumb->url}'></a>";
}

注意:ProcessWire会即时创建任意大小的图像,然后对其进行缓存。

$ pages变量

$pages变量是站点中所有页面的引用。 这样,您可以从任何位置访问网站的所有内容和页面。

对于下一个示例,我将参考ProcessWire的标准演示站点 ,该站点提供了美国摩天大楼的集合。

获取特定页面并输出其标题:

echo $pages->get("/cities/chicago/sears-tower/")->title;

注意: /cities/chicago/sears-tower/是指向ProcessWire页面树层次结构中的Sears Tower页面的完整路径。

查找所有高度大于500英尺且小于或等于1,000英尺的摩天大楼:

$skyscrapers = $pages->find("template=skyscraper, height>500, height<=1000");

注意: height是包含在skyscraper模板中的字段。

查找1950年之前建造的所有摩天大楼,其中有10层以上的楼层,按年份降序排列,然后按楼层降序排列:

$skyscrapers = $pages->find("template=skyscraper, year<1950, floors>=10, sort=-year, sort=-floors");

注意: yearfloors是模板skyscraper内包含的字段。

查找芝加哥拥有60层以上的所有摩天大楼,并按楼层升序排列:

$skyscrapers = $pages->get("/cities/chicago/")->find("floors>=60, sort=floors");

找到建筑师David Childs或Renzo Piano的所有摩天大楼,然后按高度降序排序:

$david = $pages->get("/architects/david-childs/");
$renzo = $pages->get("/architects/renzo-piano/");
$skyscrapers = $pages->find("template=skyscraper, architects=$david|$renzo, sort=-height");

注意: architects是包含在skyscraper的字段。

3.它基于模块化且易于扩展的体系结构构建

ProcessWire本身由一个小的核心框架(将此视为具有基本功能的ProcessWire的本质)和一组预包装的模块组成,每个安装都随附这些模块。 默认情况下,其中一些核心模块已安装,而其他一些则已卸载。 将ProcessWire模块视为WordPress插件:它们扩展并自定义系统。

ProcessWire的模块化性质具有一些不错的优点:

  • 该代码库更易于维护,因为核心功能与系统的其他部分隔离开并分离了,这也大大提高了总体安全性
  • 新功能的开发正在简化,并且可以更轻松,更快速地定位和修复错误。
  • 升级到较新版本的ProcessWire或单个模块通常是一件容易的事,并且您不必担心升级后一切都会中断。

安装模块

安装模块就像将模块的文件拖到/site/modules/目录,然后在管理GUI中单击“ 安装 ”一样简单。 但是实际上,还有更多的方法可以从modules目录中安装模块

例如,您可以安装Modules Manager ,使您可以直接在管理GUI中浏览,下载,安装和更新模块。

模块数量:质量胜于数量

在撰写本文时,ProcessWire存在大约370个模块。 现在,您可以将这个数字与大约40,500个WordPress插件进行比较,并且这种比较确实很有趣,同时也可以揭示出来。 在此之后,您可以得出一些结论,思考一下ProcessWire及其模块的一般性质,以及它们如何与其他CMS的插件进行比较:

  • ProcessWire 并不像WordPress,Joomla,Drupal等流行和广泛。
  • ProcessWire模块通常具有很高的代码质量。 他们做一件事,并且做得很好。
  • ProcessWire内核本身是如此强大和灵活,以至于根本不需要添加大量附加模块来对其进行扩展。 例如,您不需要创建画廊幻灯片的模块,不需要获取第一个子对象的模块,不需要生成缩略图的模块等。ProcessWire的基本功能已经涵盖了所有(以及更多)内容。

钩子

尽管挂钩是一个相当高级的主题,但它是值得注意的,它表明ProcessWire的功能非常易于更改和扩展。 ProcessWire包含数百种您可能会钩住的方法 ,以修改方法的行为。

假设我们已经使用APIForm Builder构建了一个简单的联系表单,并且某些字段被标记为后端所需。 我们要实现的是,还为必需的表单字段添加适当HTML5前端标记。 ProcessWire使这一过程变得非常容易。 我们只需简单地插入输入字段的render方法并定义我们要自定义的内容:询问是否需要该字段,添加所需的前端属性,并在输入标签的末尾添加一个星号。

$forms->addHookBefore("Inputfield::render", function ($event) {
    $field = $event->object;
    
    if ($field->required) {
        $field->attr("required", "required");
        $field->label .= "*";
    }
});

4.它不会妨碍您,它提供工具来创建量身定制的,用户友好的界面

人们喜欢ProcessWire的主要事情之一: 不会妨碍您。 它以您想要的方式运行,并适应您开发网站的风格。

例如,您可以完全控制标记的输出,而不必强迫您采用特定的方式在文件系统上开发模板。 如果您熟悉WordPress开发风格,则可以像以前一样继续进行。 或者,如果您想创建更复杂的体系结构,则可以使用MVC启发的方法,它也将同样有效。

如前所述,页面没有一组必填字段,以便ProcessWire理解页面的结构。 (至少不可见。一些内置字段,例如对页面父级的引用或页面子级的数量等。)如果需要,您可以在页面上放置100个字段,以任何方式对其进行排序您可以根据需要指定哪些是必需的,哪些不是必需的,可以将它们放在不同的字段集或标签中,以获得更好的UI体验。

人们喜欢ProcessWire的另一个主要方面: 它自然提供了创建定制的,用户友好的界面的工具。 我在上一段中对您有所了解。 模板的自定义级别令人赞叹。 亲身经历了这一点之后,您将理解为什么ProcessWire更像是CMF而不是CMS。

例如:每个字段都附加有模板特定的上下文。 这意味着您可以指定一个模板在一个模板中具有相同的标签,描述和行为,而在另一个模板中具有完全不同的标签,描述和行为。

另一个示例是inputfield依赖项 :它们使您可以指定显示或要求页面编辑器中特定字段的条件。

另一个示例是PageTableExtended模块:它允许用户以直观直观的方式查看,编辑和修改网站页面的不同部分(由开发人员定义)。

对我而言,这就是优雅和深厚的力量的定义。

结论

本文仅能概述您可以使用ProcessWire及其所提供的内容。 简单地说,主要功能列表太长了,将超出本文的范围。 让我瞥见其中一些:

您使用ProcessWire的次数越多,对核心概念,API及其模块化体系结构的内化程度就越高,则使用它的乐趣就越大。 您将认识到ProcessWire的工具和工作流程实际上是多么强大。 可以说,限制您使用ProcessWire实现某个目标的唯一原因是您自己的想象力。

最后,我引用 ProcessWire的创建者Ryan Cramer:

有关ProcessWire的有用链接和工具:

翻译自: https://code.tutsplus.com/articles/4-reasons-to-choose-processwire-as-your-next-cms--cms-25062

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用 Go 语言实现一个内容管理系统 (CMS),你需要考虑以下几个方面: 1. 数据存储:你需要选择一种数据库,并使用 Go 语言来连接和操作数据库。常见的数据库有 MySQL、PostgreSQL 和 MongoDB。 2. 网站框架:你可以使用 Go 语言内置的 net/http 库来构建网站后端,也可以使用第三方框架,比如 Gin、Echo 和 Buffalo。 3. 网站布局和样式:你可以使用 HTML、CSS 和 JavaScript 来设计网站的布局和样式。 4. 网站功能:你可以根据需求来实现各种功能,比如文章发布、评论管理、用户注册登录等。 在开始实现之前,建议先了解 Go 语言的基础知识,包括变量、类型、流程控制、函数、指针等。同时,也建议了解一些常用的第三方库,比如用于数据库操作的 GORM 库和用于模板渲染的 html/template 库。 ### 回答2: 使用Go语言实现一个CMS系统是完全可行的。Go是一种现代化的编程语言,它具有高效的并发性能和简洁的语法,非常适合构建Web应用程序。 首先,我们可以使用Go的HTTP包来处理HTTP请求和响应。通过创建一个HTTP服务器,我们可以监听特定的端口,并对请求进行路由和处理。可以使用gorilla / mux库来进行路由器设置和管理。 接下来,我们可以设计和实现数据库模型。Go有很多流行的ORM(对象关系映射)库,如GORM和xorm。使用这些库,我们可以方便地将Go结构体映射到数据库表,并进行基本的CRUD(创建、读取、更新、删除)操作。 然后,我们可以创建处理程序来处理特定的请求,例如创建、编辑和删除内容。可以使用HTML模板引擎(如html / template)来生成动态的HTML页面,也可以使用Go的JSON库将数据以JSON格式返回给客户端。 为了保护用户登录和数据的安全,我们可以使用Go的加密库来存储和验证用户的密码,并使用会话管理库(如gorilla / sessions)来跟踪用户的认证状态。 最后,我们可以使用Go的测试框架(如testing / testing)来编写和运行单元测试和集成测试,以确保系统的正确性和稳定性。 总之,使用Go语言实现一个CMS系统是一项有趣且具有挑战性的任务。Go的简洁性、高效性和并发性能使其成为构建可扩展的Web应用程序的理想选择。 ### 回答3: 使用Go语言来实现一个CMS(内容管理系统)可以借助于一些Go语言的库和框架来快速搭建一个功能完善的CMS系统。 首先,可以使用Go的Web框架如Gin或Echo来处理HTTP请求和路由,这样能够方便地创建和管理不同页面的接口。 其次,可以使用Go的数据库驱动库如Gorm来连接数据库,如MySQL或PostgreSQL等,以存储和管理网站的数据。可以使用Gorm的模型和迁移功能来定义表结构和进行数据库迁移。 接下来,可以利用Go的模板引擎如html/template来生成动态页面,通过将数据库中的数据和模板结合,可以实现页面的渲染更新。 此外,由于CMS系统通常需要进行用户身份验证和授权管理,可以使用Go的身份验证和授权库如jwt-go或casbin来实现用户的登录、验证和权限管理功能。 同时,为了方便系统的扩展和维护,可以使用Go的依赖管理工具如Go Modules来管理项目的依赖关系。 总结起来,用Go实现一个CMS系统需要使用到Go语言的Web框架、数据库驱动库、模板引擎、身份验证与授权库等,通过这些工具可以方便地创建和管理网站的接口、数据库、页面、用户身份验证和权限管理等功能,从而实现一个功能完善的CMS系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值