carawebs / sage-blade-data
Sage 9 WordPress主题的数据控制器 - 将数据插入Blade模板。
This package is auto-updated.
Last update: 2024-09-21 23:38:00 UTC
README
Blade是Laravel提供的一个简单但强大的模板引擎。
在Laravel中使用Blade很简单,但在WordPress项目中使用它需要在视图中使数据可用。
Roots Sage主题使用Blade,此插件允许您选择哪些资源可以访问数据。如果需要在不同视图中展示相同的数据,这可能很有用。
使用方法
运行
composer require carawebs/sage-blade-data
主题设置
要加载,在主题级别包含以下内容
<?php namespace App; use \Carawebs\SageBladeData\Loader; use \Carawebs\SageBladeData\Filters; // Optionally, see https://github.com/Carawebs/wp-metadata-accessor use \Carawebs\DataAccessor\PostMetaData; /** * Load Controllers */ add_action('wp', function() { new Loader(new Filters, new PostMetaData); });
您可以在主题中创建一个新文件来包含此内容 - 记得将此类文件添加到functions.php
中的array_map()
函数中。
在您的主题中创建一个目录(例如/Carawebs/Controllers
)。这将成为您的控制器命名空间。
请注意,默认情况下,控制器目录的路径为get_template_directory() . '/Carawebs/Controllers'
。这由'carawebs-controllers/path-to-controllers'过滤。
在主题的composer.json
中引用此内容以启用自动加载。例如
// composer.json "autoload": { "psr-4": { "Roots\\Sage\\": "src/lib/Sage/", "Carawebs\\Controllers\\": "src/Carawebs/Controllers/" } }
然后运行
composer dump-autoload
...以重新生成Composer的自动加载文件。
使用方法
控制器类必须扩展Carawebs\SageBladeData\Controller
。
控制器类必须包含至少两个方法
targetTemplates()
返回应接收数据的模板数组dataToReturn()
返回将可在指定模板中使用的数组数据
以下是一个示例
namespace Carawebs\Controllers; use Carawebs\SageBladeData\Controller; /** * */ class FrontPage extends Controller { // Data available on 'home' and 'page' templates: public function targetTemplates() { return ['home', 'page']; } public function dataToReturn() { $carouselSubfields = [ 'image' => ['image_ID', 'full'], 'description'=>'text' ]; return [ // Post metadata from https://github.com/Carawebs/wp-metadata-accessor // You can just access using ACF functions or similar. 'pageIntro' => $this->postMeta->getField('metafield'), 'intro' => $this->postMeta->getField('intro'), 'carouselData' => $this->postMeta->getRepeaterField('slider', $carouselSubfields), ]; } }
父类可选地接收一个对象,该对象控制帖子元数据,表示为$this->postMeta
。您可以忽略它并构建自己的数据提取器,但这是分离关注点的好方法。
在Blade模板中访问数据
由于多个控制器可以添加数据到单个Blade视图,数据变量以类名和驼峰式命名作为前缀。
例如,如果您定义了
class About extends Controller { public function targetTemplates() { return ['about']; } public function dataToReturn() { return [ 'intro' => "Hello World", ]; } }
https://laravel.net.cn/docs/7.x/blade...you您将可以在blade中以$aboutIntro
的方式访问定义的变量。