【问题标题】:How can I define the reusable function in october cms?如何在 october cms 中定义可重用函数?
【发布时间】:2020-06-29 16:47:54
【问题描述】:

我刚开始十月CMS。我正在努力定义一些可以在整个应用程序中使用的功能,这意味着可以从任何插件、页面、部分、布局中访问它。这是必须保持干净的代码。我试图从 october cms 官方文档中找到任何提示,但没有运气。有什么想法吗?

【问题讨论】:

    标签: octobercms


    【解决方案1】:

    我找到了这个可能对其他人有帮助的解决方案:

    创建您自己的插件。 在 OctoberCMS 中创建自己的插件有无数种方法,但如果你不知道如何做到这一点,我认为你应该使用 Builder 插件,这使得插件创建变得容易(阅读其文档了解详细信息)。 https://octobercms.com/plugin/rainlab-builder 当然,如果您已经使用过上面的脚本,您可能知道如何创建插件,但是这些信息对于以后阅读这篇文章的初学者很有用。

    在您的插件文件夹中创建一个自定义类 打开您的插件文件夹(例如:./plugins/oskar/tutorial ...其中 oskar 是您的作者姓名,tutorial 是插件的名称)并在您的插件文件夹(./plugins/奥斯卡/教程/课程)。在“classes”文件夹中创建一个名为“MyClass.php”的新 PHP 文件,其中包含以下内容:

    <?php
    namespace Oskar\Tutorial\Classes;
    class MyClass
    {
        public static function myMethod($param1)
        {
            return "Hello " . $param1;
        }
    }
    

    注意:请记住,您必须根据您的真实作者和插件名称更改命名空间,并且文件名需要与其中的类名匹配(哦,别忘了该命名空间和类名区分大小写)..

    使用新功能扩展 Twig 标记语言 打开以编辑插件文件夹(./plugins/oskar/tutorial/Plugin.php)中的“Plugin.php”并添加以下代码:

    public function registerMarkupTags()
    {
        return [
            'functions' => [
                'myFunction' => ['\Oskar\Tutorial\Classes\MyClass', 'myMethod'],
            ]
        ];
    }
    

    注意:同样,不要忘记根据需要更改命名空间。

    你已经完成了!

    现在你可以像以前一样在 Twig 中使用这个函数了:

    {{ myFunction('world!') }}
    

    但您也可以在 cms 页面的 php 部分调用相同的方法:

    use Oskar\Tutorial\Classes\MyClass;
    function onStart()
    {
        echo MyClass::myMethod('world!');    
    }
    

    就是这样。

    【讨论】:

      【解决方案2】:

      我不知道你想要做什么样的功能。您可以像这样从一个插件调用 php 函数:创建并注册一个新插件(插件 A)。然后,您可以创建/调用组件来处理事件处理程序或创建一个“类”文件夹。

      这是一个用于在线订购产品的插件(插件 B)示例。这会使用您的所有功能(插件 A)调用您的插件:

      use Author\PluginA\Classes\CustomFunctions;
      
      function onSubmitOrder() {
          $customFunctions = new CustomFunctions;
          $inputs = Input::all();
          $order = $customFunctions->validateOrder($inputs);
          if ($order->success == true) {
              return $order;
          } else {
              return $order->error;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 1970-01-01
        • 2021-04-23
        • 2019-07-16
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多