Cakephp:在视图页面上添加另一个视图页面链接

时间:2013-07-18 03:07:14

标签: ajax cakephp cakephp-2.0 cakephp-2.1

抱歉问这个问题..我正在使用Cakephp 2.x ...我的控制器名称文件夹中有一个视图页面,例如 Controller / index.ctp ...和我将ajaxfiles存储在app / webroot / ajax / ajaxfile.html

现在在我的index.php文件中,我正在访问像这样的ajax页面

                <a href="ajax-demo/ajaxfile.html" class="file-link">
                                    <span class="icon file-png"></span>
                                    Simple gallery</a>

控制器

       public function index(){


        }

现在问题是我想将变量发送到我的两个页面... index.ctp和ajaxfile ...我怎么能这样做?解决这些问题的最佳方法是什么.... < / p>

我是否必须从webroot移动ajaxfiles并粘贴到控制器名称文件夹下? 如果是这样,那我怎样才能将变量发送到没有模型和控制器的ajax文件

如果有人知道解决方案,请咨询我。并举个例子

1 个答案:

答案 0 :(得分:1)

有不同的方法来实现这一点,在这里我写的是最简单的一个

首先,您需要将“index.ctp”文件移动到“View / YOUR CONTROLLER NAME /”文件夹中。

1)要在视图中访问变量,您需要从控制器的方法中设置它,如

public index(){
   $this->set('yourVariable', 'Your Value');
}

2)要访问视图文件(index.ctp)中的值,您需要像这样调用此变量

 $yourVariable;//If you want to print this then you can write like this 
 echo $yourVariable;

3)要从index.ctp调用ajax文件,最简单的方法是在此锚点上调用onclick事件,onclick事件将调用JAVASCRIPT方法,该方法将进一步进行ajax调用并将输出放入你的index.ctp中的元素,ajax调用将进一步调用你的控制器方法(在这里实现你的html相关逻辑)

例如,

<a href="#" class="file-link" onclick="yourAjaxCallMethod('http://'.<?php echo $_SERVER['HTTP_HOST'].$this->webroot;?>.'yourController/ajaxMethod/'.<?php echo $yourVariable;?>)"><span class="icon file-png"></span>Simple gallery</a>

 <div id="yourAjaxFileOutputReplaceMentDiv"></div>

4)在你的JS文件中创建一个javascript方法,这个JS文件必须加载到你的布局文件中。

function yourAjaxCallMethod(BaseURL,yourVarible)
{
    //Initialize Ajax Method 
var req = getXMLHTTP();//Let's this method Initialize your Ajax 

if (req)
{
  req.onreadystatechange = function() {
  if (req.readyState == 4)
  { 
     if (req.status == 200)
     {
            document.getElementById('yourAjaxFileOutputReplaceMentDiv').innerHTML=req.responseText;
     } else {
     alert("There was a problem while using XMLHTTP:\n" + req.statusText);
     }
  }
    }           
 var URL = BaseURL+yourVarible+'/'+Math.random();       
 req.open("GET", URL, true);
 req.send(null);
}
}

5)你的控制器“yourController”中的AJAX文件相关方法。将autoRender设置为False

public function ajaxMethod(){

 $this->autoRender = false;
 //Check $this->request['pass'] for arguments send from ajax call
 $retreivedVariable =  $this->request['pass'][0];
 echo 'I retrieved variable'.$retreivedVariable;     
}

然而,不是编写核心javascript和ajax方法,而是可以调用inbuild Ajax Helper。