You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Concrete5 8.3 Ajax调用视图时无法传递变量的问题求助

解决Concrete5 8.3中Ajax调用视图无法获取变量的问题

我来帮你搞定这个变量传递的问题!你遇到的核心问题是:当手动创建BlockView实例时,控制器里通过$this->set()设置的变量并不会自动同步到这个新的视图实例中,导致view/view.php里拿不到$test的值。

下面给你两种可行的解决方案,选哪种都能解决问题:

方案1:手动给BlockView实例设置变量

直接在创建BlockView后,给它单独赋值变量,这样视图就能访问到:

修改Controller.php里的Ajax处理部分:

public function action_like($token = false, $bID = false) {
    if ($this->bID != $bID) {
        return false;
    }
    if (Core::make('token')->validate('like_page', $token)) {
        $page = Page::getCurrentPage();
        $u = new User();
        $this->markLike($page->getCollectionID(), $page->getCollectionTypeID(), $u->getUserID());
        if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
            $b = $this->getBlockObject();
            $bv = new BlockView($b);
            // 手动给BlockView实例设置需要传递的变量
            $bv->set('test', 'test');
            $bv->render('view/view');
        } else {
            Redirect::page($page)->send();
        }
    }
    exit;
}

方案2:使用控制器自带的renderView方法

这种方法更简洁,控制器的renderView()会自动携带之前通过$this->set()设置的所有变量,不需要手动处理视图实例:

修改Controller.php里的Ajax处理部分:

public function action_like($token = false, $bID = false) {
    if ($this->bID != $bID) {
        return false;
    }
    if (Core::make('token')->validate('like_page', $token)) {
        $page = Page::getCurrentPage();
        $u = new User();
        $this->markLike($page->getCollectionID(), $page->getCollectionTypeID(), $u->getUserID());
        if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
            // 先设置变量,再用控制器的renderView渲染目标视图
            $this->set('test', 'test');
            echo $this->renderView('view/view');
        } else {
            Redirect::page($page)->send();
        }
    }
    exit;
}

两种方案修改后,你的view/view.php里的<?php echo $test; ?>就能正常输出test了,同时<p> Title </p>也会正常显示。

内容的提问来源于stack exchange,提问作者Bounkhavy Phannavong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:54:18