mynameisjohn
mynameisjohn

Reputation: 175

Cakephp : add another view page link on the view page

sorry for asking this question ..i am working on a Cakephp 2.x ... i have a view page in my controller name folder e.g Controller/index.ctp ... and i have ajaxfiles are stored in app/webroot/ajax/ajaxfile.html

now on my index.php file i am acessing the ajax page like this

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

Controller

       public function index(){


        }

now the problem is i want to send the variables to both of my pages ... index.ctp and ajaxfile ... how can i do this ??what is the best approach to tackle these things ....

do i have to move the ajaxfiles from webroot and paste under the controller name folder? if is it so then how can i send variables to ajax files which has no model and controller

please if any one know the solution then please advice me. and give an example too

Upvotes: 0

Views: 1197

Answers (1)

Rohit Roy
Rohit Roy

Reputation: 11

There are different way to achieve this, here I'm writing the simplest one

First you need to move your "index.ctp" file to your "View/YOUR CONTROLLER NAME/" folder.

1) To access the variable in view you need to set it from your controller's method like this

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

2) To access the value in your view file (index.ctp), you need to call this variable like this

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

3) To call a ajax file from your index.ctp the simplest method is to call a onclick event on this anchor, the onclick event will call a JAVASCRIPT method which will further make a ajax call and will place the output in an element in your index.ctp, The ajax call will further call your controller method (implement your html related logic here)

For example,

<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) create a javascript method in your JS file, this JS file must be loaded in your layout file.

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) Your AJAX file related method in your controller "yourController". Set autoRender to 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;     
}

However instead of writing core javascript and ajax method you can call the inbuild Ajax Helper for same.

Upvotes: 1

Related Questions