fullsix/wordpress-bundle

让WordPress处理Symfony2的视图

dev-master 2013-03-16 17:26 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:37:54 UTC


README

这是一个正在进行中的项目

这个包尝试将WordPress与Symfony2集成,使得WordPress用于处理视图,而Symfony2用于处理控制器。

当您想在现有的WordPress网站上添加Symfony2控制器时,应使用此包,例如。这非常基础,但事实上工作得相当好,我们已经在各种WordPress实例上实现了这种机制,其中一个包含两个博客,使用多种语言(使用出色的WPML插件)。

为了在WordPress内容中解释Twig标签,需要Symfony >= 2.2。

安装

下载并安装包

将以下依赖项添加到您的项目的composer.json文件中

"require": {
    # ..
    "fullsix/wordpress-bundle": "dev-master"
    # ..
}

在内核中注册包

<?php
// app/AppKernel.php

public function registerBundles() {
    $bundles = array(
        // ...
        new FullSIX\Bundle\WordPressBundle(),
        // ...
    );
}

安装WordPress

在您的web目录中安装WordPress并启动其配置。

安装WordPress插件

需要一个简单的WordPress插件来解释WordPress内容中的Twig内容。从这里安装

修改您的app_dev.php

编辑您的app_dev.php文件,并在开头添加以下行

use FullSIX\Bundle\WordPressBundle\WordPressResponse;

并在末尾替换

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
global $container, $response;
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$container = $kernel->getContainer();
if ($response instanceof WordPressResponse) {
    $container->enterScope('request');
    $container->set('request', $request, 'request');
    $targetUrl = $response->getTargetUrl();
    if (!empty($targetUrl)) {
        $_SERVER['REQUEST_URI'] = $targetUrl;
    }
    define('WP_USE_THEMES', true);
    require('./wp-blog-header.php');
} else {
    $response->send();
    $kernel->terminate($request, $response);
}

修改后,将更改复制到您的app.php文件中,并删除WordPress的index.php文件。如果您激活了WordPress的URL重写功能,可能需要注释WordPress自动修改的您的.htaccess文件中的修改。

示例Symfony2控制器

/**
 * @Route("/test-page/")
 */
public function pageAction()
{
    return WordPressResponse::currentPage(array("var1" => "value1", "var2" => 2));
}

/**
 * @Route("/test-form/")
 */
public function formAction(Request $request)
{
    // Create form
    $builder = $this->createFormBuilder();
    $form = $builder
        ->add('var1', 'text', array("label" => "Variable 1", "required" => false, "constraints" => new NotBlank()))
        ->add('var2', 'text', array("label" => "Variable 2", "required" => false, "constraints" => new NotBlank()))
        ->getForm();
    $result = null;
    if ($request->getMethod() == 'POST') {
        $form->bind($request);
        $data = $form->getData();
        $result = $data["var1"]." ".$data["var2"];
    }
    return WordPressResponse::currentPage(array('form' => $form->createView(), "result" => $result));
}

这将创建两个路由,并将它们的视图委托给相应的WordPress页面。例如,在/test-page/ WordPress内容中,您可以有

This is my test page, with some really interesting content.
<ul>
<li>var1 = {{ var1 }}</li>
<li>var2 = {{ var2 }}</li>
</ul>

这将显示为

This is my test page, with some really interesting content.
    * var1 = value1
    * var2 = 2

/test-form/页面可以有以下内容

Hi,

This is my test form.

<form method="post">
    {{ form_widget(form) }}
    <input type="submit" value="Ok" />
</form>
{% if result is not null %}
Result: {{ result }}
{% endif %}

这将显示一个基本表单,当提交时将连接两个变量。