Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在自定义cms中创建类似WordPress的小部件_Php_Laravel 5 - Fatal编程技术网

Php 在自定义cms中创建类似WordPress的小部件

Php 在自定义cms中创建类似WordPress的小部件,php,laravel-5,Php,Laravel 5,我想在我的自定义cms上创建最新的post Widget等,如WordPress中的任何建议,从哪里开始都很好WordPress中的Widget基本上是可以“挂钩”到主题中特定位置的对象。我认为,拉雷维尔最相似的机制是 无论您希望小部件出现在CMS中的何处,都会触发一个事件,比如“WidgetsGoHere”,并将该事件的响应插入到您的视图中 然后,我可能会为每个小部件创建一个类(也可能是一个小部件基类,所有小部件都可以从中继承有用的代码)。事件订阅者将侦听WidgetsGoHere事件,然后构

我想在我的自定义cms上创建最新的post Widget等,如WordPress中的任何建议,从哪里开始都很好

WordPress中的Widget基本上是可以“挂钩”到主题中特定位置的对象。我认为,拉雷维尔最相似的机制是

无论您希望小部件出现在CMS中的何处,都会触发一个事件,比如“WidgetsGoHere”,并将该事件的响应插入到您的视图中

然后,我可能会为每个小部件创建一个类(也可能是一个小部件基类,所有小部件都可以从中继承有用的代码)。事件订阅者将侦听WidgetsGoHere事件,然后构建它需要输出的任何内容—一堆HTML,并将其作为响应返回。触发事件的代码随后将输出响应

在WordPress中,主题或插件注册它作为主题或插件启动代码的一部分使用的任何小部件。如果您还没有为您的CMS开发插件或主题,那么您可能需要添加一些代码(可能在“开始”中)来创建您的小部件并让它们监听事件。你可以从一开始就对它们进行硬编码,一旦你的系统运行起来,也许可以转移到一个更具动态性的系统

下面是一个非常简单的示例。我们将创建三个“小部件”。从标准安装Laravel开始。然后,编辑
app\Providers\EventServiceProvider.php
,并将
$listen
变量更改如下:

protected $listen = [
    'App\Events\WantWidgets' => [
        'App\Handlers\WidgetOne',
        'App\Handlers\WidgetTwo',
        'App\Handlers\WidgetThree',
    ],
];
保存该文件,然后运行artisan命令
php artisan事件:generate
。这将读取我们刚才提供的配置,并创建一个名为
wantwidges
的事件和三个不同的事件侦听器,这将是我们的三个小部件。您应该能够在
app\Events
app\Handlers
中看到新类

然后,更改
WelcomeController.php
,以便
WelcomeController
索引页面触发事件,并将其获得的响应传递回其视图:

public function index()
{
    $widgets = Event::fire(new \App\Events\WantWidgets);
    return view('welcome')->with('widgets', $widgets);
}
在视图(
resources\views\welcome.blade.php
)中,获取您现在传递的“小部件”并输出它们:

<ul>
    @foreach ($widgets as $widget)
        <li>{{ $widget}}</li>
    @endforeach
</ul>
当您刷新页面时,您应该会看到该字符串作为列表项之一

这类似于WordPress窗口小部件系统在页面中希望窗口小部件出现时的工作方式,即触发事件。小部件“注册”到该事件并“绘制”自己,在该点将HTML输出到页面


这应该让你开始。实际上,这方面的一切都可以改进。例如,您的小部件可能使用自己的刀片模板将其HTML呈现为字符串并返回该字符串。

WordPress中的小部件基本上是可以“挂钩”到主题中特定位置的对象。我认为,拉雷维尔最相似的机制是

无论您希望小部件出现在CMS中的何处,都会触发一个事件,比如“WidgetsGoHere”,并将该事件的响应插入到您的视图中

然后,我可能会为每个小部件创建一个类(也可能是一个小部件基类,所有小部件都可以从中继承有用的代码)。事件订阅者将侦听WidgetsGoHere事件,然后构建它需要输出的任何内容—一堆HTML,并将其作为响应返回。触发事件的代码随后将输出响应

在WordPress中,主题或插件注册它作为主题或插件启动代码的一部分使用的任何小部件。如果您还没有为您的CMS开发插件或主题,那么您可能需要添加一些代码(可能在“开始”中)来创建您的小部件并让它们监听事件。你可以从一开始就对它们进行硬编码,一旦你的系统运行起来,也许可以转移到一个更具动态性的系统

下面是一个非常简单的示例。我们将创建三个“小部件”。从标准安装Laravel开始。然后,编辑
app\Providers\EventServiceProvider.php
,并将
$listen
变量更改如下:

protected $listen = [
    'App\Events\WantWidgets' => [
        'App\Handlers\WidgetOne',
        'App\Handlers\WidgetTwo',
        'App\Handlers\WidgetThree',
    ],
];
保存该文件,然后运行artisan命令
php artisan事件:generate
。这将读取我们刚才提供的配置,并创建一个名为
wantwidges
的事件和三个不同的事件侦听器,这将是我们的三个小部件。您应该能够在
app\Events
app\Handlers
中看到新类

然后,更改
WelcomeController.php
,以便
WelcomeController
索引页面触发事件,并将其获得的响应传递回其视图:

public function index()
{
    $widgets = Event::fire(new \App\Events\WantWidgets);
    return view('welcome')->with('widgets', $widgets);
}
在视图(
resources\views\welcome.blade.php
)中,获取您现在传递的“小部件”并输出它们:

<ul>
    @foreach ($widgets as $widget)
        <li>{{ $widget}}</li>
    @endforeach
</ul>
当您刷新页面时,您应该会看到该字符串作为列表项之一

这类似于WordPress窗口小部件系统在页面中希望窗口小部件出现时的工作方式,即触发事件。小部件“注册”到该事件并“绘制”自己,在该点将HTML输出到页面


这应该让你开始。实际上,这方面的一切都可以改进。例如,您的小部件可能会使用自己的blade模板将HTML呈现为字符串并返回该字符串。

谢谢matt,任何简单的示例都是great@TerryLin考虑到这是一个完全不同的问题,我想你应该问一个新问题。@MattGibson你有没有开始过一个项目,它是按照你在这里描述的方式实现的,还是类似的?谢谢matt,任何简单的例子都可以great@TerryLin考虑到这是一个完全不同的问题,我想你应该问一个新问题。@MattGibson你有没有开始过一个项目,它是以你在这里描述的方式或类似的方式实施的?