在Facebook应用程序中嵌入Yii模块页面

时间:2012-10-29 12:44:34

标签: php facebook facebook-graph-api yii integration

我已经创建了Yii测验模块,我也想在Facebook应用程序(Facebook端)中使用 它可以通过iframe完成,但生成的页面也有菜单和许多其他不必要的(在这种情况下)东西。 Yii是否可以在没有网站其余部分的情况下仅显示生成的模块代码?

2 个答案:

答案 0 :(得分:2)

尝试并为该模块使用不同的布局。首先,您可以将布局文件夹和布局文件添加到该模块,例如: /protected/modules/quiz/views/layouts/quizlayout.php 。所以这个新的 quizlayout.php 应该是这个模块中所有视图的布局。

为此,您可以在QuizModule类的init()中设置 quizmodule layout property,就像这样(在 QuizModule.php 中) :

class QuizModule extends CWebModule {

    public function init() {
        // this method is called when the module is being created
        // you may place code here to customize the module or the application

        // import the module-level models and components
        $this->setImport(array(
            'quiz.models.*',
            'quiz.components.*',
        ));
        $this->layout='quizlayout';
    }

    //...
}

现在默认情况下,gii生成模块的控制器是 component / Controller.php 文件中Controller类的子类。并且Controller类定义了layout,所以如果你有相同的结构,那么上面的方法将不起作用,你必须覆盖模块控制器中的布局。但是,您可以在 QuizModule.php 中的beforeControllerAction($controller, $action)函数中执行此操作,而不是进入每个控制器并添加一行。

public function beforeControllerAction($controller, $action) {

    if(parent::beforeControllerAction($controller, $action)) {
        // this method is called before any module controller action is performed
        // you may place customized code here

        $controller->layout='quizlayout';

        return true;
    }
    else
        return false;
}

修改

当然你的 quizlayout.php 不应该有菜单代码和任何额外的东西,但至少应该有echo $content行,如爱斯基摩的回答中所提到的那样

答案 1 :(得分:1)

在你的protected / views中有一个名为“main.php”的文件 这是您的主要布局文件,它在$ this-> render

调用的任何视图周围呈现

删除菜单等..删除正文中的所有内容除了行:

<?php echo $content; ?> 

显然留下头部的所有东西(.css文件等......)