使用craftcss3来做网站,网站建设用什么cms?

2018-01-03 17:17


 
有时候你想用一些功能或设计来增强一个客户网站,而这个网站是非常特定的。当然,你可以做一个自定义的插件脚手架从插件到ry .io,并遵循所以你想做一个工艺3  插件?文章。
 
但是,对于很多事情来说,这似乎太多了。也许你只是想增强登录屏幕的外观来应用客户品牌的背景图片。一个自定义插件似乎有点多。
 
随着Craft CMS 3,Craft引入了一个模块的概念,它适合这种类型的场景完美的法案。
 
模块与插件
模块和插件之间的主要区别是:
 
插件可以被禁用
插件可以被卸载
插件在AdminCP中有一个设置框架
 
 
除此之外,它们非常相似。模块和插件都是用PHP编写的,可以访问完整的Craft CMS  API。
 
当功能是网站的一个组成部分时,模块是一个完美的选择
 
即使您不认为自己是“ PHP开发人员”,也可以轻松获得一个简单的模块,并在Craft AdminCP中加载一些自定义的CSS或JavaScript,以增强客户的体验。
 
 
 
我们将在本文中向您展示如何做到这一点。
 
模块下的搜索引擎
考虑Modules的一个好方法就是它们是不能被卸载的插件。他们在易于实现和提供插件的功能之间取得了很好的平衡。
虽然很容易想到模块被剥离了插件,但实际上插件实际上是建立在模块之上的!
 
所以我们应该把插件当成增强模块
 
看看代码craft\base\Plugin: 
 
/**
 * Plugin is the base class for classes representing plugins in terms of objects.
 *
 * @property string           $handle   The plugin’s handle (alias of [[id]])
 * @property MigrationManager $migrator The plugin’s migration manager
 *
 * @author Pixel & Tonic, Inc. <support@pixelandtonic.com>
 * @since  3.0
 */
class Plugin extends Module implements PluginInterface
{
...
 工艺\基地\插件扩展模块!
这是什么显示的是工艺CMS 3  插件实际上是Yii的2模块,但只是一些通过增强像素加入到他们与  进补。这些增强功能允许卸载插件,设置,AdminCP部分等。
 
这是一个主题,在  建立一个新的工艺CMS 3  项目文章中讨论,这是工艺CMS 3  已完全重构在Yii 2之上。
 
工艺CMS 3现在是内容管理系统(CMS)和内容管理框架(CMF)
 
这是一个重要的观点,因为许多定制的应用程序通常使用像Laravel这样的框架来构建,可以使用Craft CMS 3来构建。使用Craft 3检查  RESTful API是一个例子。
这意味着,我们很可能会看到Craft CMS 3  被用作一个框架和  基础的网络应用程序,想要一个真棒CMS后端免费。但是我离题了。。。。
 
设置站点模块
那么让我们来谈谈为我们的Craft网站建立一个实际的网站模块。这里列出的所有代码都在可用的网站模块如果您想下载GitHub库。
 
我们所有的网站模块的作用是加载一个资产包,其中包含CSS和JavaScript,我们希望在AdminCP加载。
 
这允许您在登录屏幕上执行诸如拥有客户品牌背景图片之类的 功能,或者通过CSS 和  JavaScript 来调整AdminCP 的外观和功能。
 
 
模块可以做得比这更多,实际上他们可以做任何插件可以做的事情。但是这个基础允许前端开发人员增强他们客户的网站,而不需要深入了解模块的工作原理。
 
你会发现,如果你使用的  composer create-project -s RC craftcms/craft PATH是命令  像素和  进补建议  ,以创建新的项目,他们甚至提供了一个样本  config/app.php ,并  modules/Module.php 已经为你。我们已经调整了一些东西,所以让我们开始吧!
 
这是项目树的样子。再次,你可以从完整的源  站点模块  GitHub的页面:
 
vagrant@homestead ~/webdev/craft/site-module (develop) $ tree -L 8 .
.
├── CHANGELOG.md
├── composer.json
├── config
│   └── app.php
├── LICENSE.md
├── modules
│   └── nystudio107
│       └── sitemodule
│           ├── assetbundles
│           │   └── sitemodule
│           │       ├── dist
│           │       │   ├── css
│           │       │   │   └── SiteModule.css
│           │       │   ├── img
│           │       │   └── js
│           │       │       └── SiteModule.js
│           │       └── SiteModuleAsset.php
│           └── SiteModule.php
└── README.md
 
10 directories, 9 files
 站点模块项目树
如果看起来很复杂,不要担心。实际上有比文件更多的组织文件夹!它基本上有3个  部分:
 
工艺 config/app.php
模块本身在 modules/nystudio107/sitemodule/SiteModule.php
我们加载的资产包 modules/nystudio107/sitemodule/assetbundles/SiteModuleAsset.php
我们不需要命名空间的东西,nystudio107/sitemodule但我使用这个熟悉的Composer供应商/包命名空间,以防将来我最终添加其他模块。
 
你可以轻松地摆脱这两个目录,并将所有内容放在modules/目录本身。
 
 
 
那么我们来看看这三个细节:
 
链接1.编辑CONFIG / APP.PHP
该config/目录有很多的,你已经习惯了,像配置文件general.php,db.php等用于工艺的各种设置CMS 3。但它也可以有一个app.php配置文件。
 
该app.php配置文件是超级强大,因为它允许您覆盖或扩展的工艺的任何部分CMS 3  的Yii 2的应用程序。再读一遍,因为它很大。使用简单的配置文件,我们可以扩展Craft CMS 3的Yii 2应用程序,或者我们可以完全替换功能。
 
 
 
我们只是将脚趾插入它,并添加一些代码来告诉它我们的新模块,并为我们加载它。
 
 
<?php
/**
 * Yii Application Config
 *
 * Edit this file at your own risk!
 *
 * The array returned by this file will get merged with
 * vendor/craftcms/cms/src/config/app/main.php and [web|console].php, when
 * Craft's bootstrap script is defining the configuration for the entire
 * application.
 *
 * You can define custom modules and system components, and even override the
 * built-in system components.
 */
 
return [
 
    // All environments
    '*'       => [
        'modules' => [
            'site-module' => \modules\nystudio107\sitemodule\SiteModule::class,
        ],
        'bootstrap' => ['site-module'],
    ],
 
    // Live (production) environment
    'live'    => [
    ],
 
    // Staging (pre-production) environment
    'staging' => [
    ],
 
    // Local (development) environment
    'local'   => [
    ],
];
 配置/ app.php
 
 
 
阿斯
我们给Craft模块的类,以及site-module引用它的句柄,然后我们告诉它加载它的每个请求通过bootstrap。
 
2.模块类
 
 
接下来,我们有我们的Module类本身modules/nystudio107/sitemodule/SiteModule.php。这是每个请求实际加载和执行的内容:
 
<?php
/**
 * SiteModule
 *
 * @link      https://nystudio107.com
 * @copyright Copyright (c) 2017 nystudio107
 */
 
namespace modules\nystudio107\sitemodule;
 
use modules\nystudio107\sitemodule\assetbundles\sitemodule\SiteModuleAsset;
 
use Craft;
use craft\events\TemplateEvent;
use craft\web\View;
 
use yii\base\Event;
use yii\base\InvalidConfigException;
use yii\base\Module;
 
/**
 * @author    nystudio107
 * @package   SiteModule
 * @since     1.0.0
 * @inheritdoc
 */
class SiteModule extends Module
{
    // Public Methods
    // =========================================================================
 
    /**
     * @inheritdoc
     */
    public function init()
    {
        Craft::setAlias('@site-module', $this->getBasePath());
        parent::init();
 
        // Only respond to AdminCP requests
        $request = Craft::$app->getRequest();
        if ($request->getIsCpRequest()) {
            // Handler: View::EVENT_BEFORE_RENDER_TEMPLATE
            Event::on(
                View::class,
                View::EVENT_BEFORE_RENDER_TEMPLATE,
                function (TemplateEvent $event) {
                    Craft::trace(
                        'View::EVENT_BEFORE_RENDER_TEMPLATE',
                        __METHOD__
                    );
                    // Add our SiteModule AssetBundle
                    $view = Craft::$app->getView();
                    try {
                        $view->registerAssetBundle(SiteModuleAsset::class);
                    } catch (InvalidConfigException $e) {
                        Craft::error(
                            'Error registering AssetBundle - '.$e->getMessage(),
                            __METHOD__
                        );
                    }
                }
            );
        }
    }
}
 模块/ nystudio107 / sitemodule / SiteModule.php
 
这里我们所做的就是设置一个Yii 2别名到我们的Module的目录中,以便稍后使用它,检查以确保这是一个AdminCP
请求(这不是控制台/命令行请求),然后监听  EVENT_BEFORE_RENDER_TEMPLATE事件。
这个事件在即将被渲染的小枝模板之前被触发。这可以让我们加载我们的资产包和其 最后的CSS 和 JavaScript,一切已经加载之后。
这是伟大的,因为我们通常要覆盖在AdminCP东西的外观或功能,并CSS特异性意味着如果我们在最后加载,我们得到的正是这样做的一个镜头。
 
3.我们的资产包
资产包只是一些任意资源的集合,例如CSS,JavaScript,图像等,需要在前端加载和使用。
这是我们的modules/nystudio107/sitemodule/assetbundles/SiteModuleAsset.php样子:
 
<?php
/**
 * SiteModule AssetBundle
 *
 * @link      https://nystudio107.com
 * @copyright Copyright (c) 2017 nystudio107
 */
 
namespace modules\nystudio107\sitemodule\assetbundles\sitemodule;
 
use craft\redactor\assets\redactor\RedactorAsset;
use craft\web\AssetBundle;
use craft\web\assets\cp\CpAsset;
 
/**
 * @author    nystudio107
 * @package   SiteModule
 * @since     1.0.0
 * @inheritdoc
 */
class SiteModuleAsset extends AssetBundle
{
    // Public Methods
    // =========================================================================
 
    /**
     * @inheritdoc
     */
    public function init()
    {
        // Set the path to our AssetBundle source
        $this->sourcePath = '@site-module/assetbundles/sitemodule/dist';
        // Declare AssetBundles that must be loaded first
        $this->depends = [
            CpAsset::class,
        ];
        // Add in our CSS
        $this->css = [
            'css/SiteModule.css',
        ];
        // Add in our JS
        $this->js = [
            'js/SiteModule.js',
        ];
 
        parent::init();
    }
}
 
 
 模块/ nystudio107 / sitemodule / assetbundles / SiteModuleAsset.php
它只是设置sourcePath到我们的dist/目录,这意味着在dist/目录下的所有东西都是应该发布在前端web/cpresources/的哈希目录名称。
 
然后它说我们依赖于已经加载的AdminCP AssetBundle,并给出了 我们想要注入到AdminCP模板中的CSS 和 JavaScript 的路径。
 
所有你真正需要了解的是,dist/目录中的所有内容都将被发布,web/cpresources/并且 我们指定的CSS 和 JavaScript将被加载:
 
 
vagrant@homestead ~/webdev/craft/site-module/modules/nystudio107/sitemodule/assetbundles/sitemodule (develop) $ tree -L 3 .
.
├── dist
│   ├── css
│   │   └── SiteModule.css
│   ├── img
│   └── js
│       └── SiteModule.js
└── SiteModuleAsset.php
 
4 directories, 3 files
 资产包目录树
所以你可以修改SiteModule.css和SiteModule.js你的心脏的内容,它会被我们的模块在AdminCP加载。
 
使作曲家快乐
 
 
为了使作曲家高兴,我们还需要确保我们的项目composer.json文件中包含以下内容:
 
 "autoload": {
    "psr-4": {
      "modules\\": "modules/"
    }
  },
 添加到composer.json
这只是确保作曲家将知道在哪里可以找到我们的模块。你可能还需要做:
 
composer dump-autoload
 
 
 重建Composer自动载入映射
 
...从项目的根目录(如果您还没有上述内容)composer.json重建Composer自动载入映射。这将自动发生。
 

服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同!

合作流程
合作流程

重庆网站建设流程从提出需求到网站建设报价,再到网站建设,每一步都是规范和专业的。

常见问题
常见问题

什么是网站定制?网站报价如何?网站常见问题。

常见问题
售后保障

网站建设不难,难的是一如既往的热情服务及技术支持。我们知道:做网站就是做服务,就是做售后。