carawebs/sage-blade-data

Sage 9 WordPress主题的数据控制器 - 将数据插入Blade模板。

1.0.4 2019-12-16 21:28 UTC

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的方式访问定义的变量。