23 июля 2010

Добавление AJAX в Joomla

  • написал: age
  • 3415
Для добавления ajax в ваш компонент необходимо:
Шаг 1
1- Создайте необходимую «ajax-функциональность» в default.php (или другом шаблоне в components/com_xxx/views/yyy/tmpl/)

<script language='javascript'>   
 
function ajxGetCitys(country_id){
 
    var xhr = getXhr();
    xhr.onreadystatechange = function(){

 
      if(xhr.readyState == 4 && xhr.status == 200){
          var city=document.getElementById('city');
 
          try //Internet Explorer
          {
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xhr.responseText);
          }
        catch(e)
          {
          try //Firefox, Mozilla, Opera, etc.
            {
              parser=new DOMParser();
              xmlDoc=parser.parseFromString(xhr.responseText,"text/xml");
            }
          catch(e) {alert(e.message)}
          }
 
          var options =xmlDoc.getElementsByTagName('options').item(0);
          city.innerHTML='';
 
          for (i=0; i < options.childNodes.length; i++){          
            var newoption=document.createElement("option");
            var myoption=options.childNodes[i];
            var newtext=document.createTextNode(myoption.childNodes[0].nodeValue);
            newoption.setAttribute("value",myoption.getAttributeNode('id').value)
            newoption.appendChild(newtext);
            city.appendChild(newoption);
 
          }
 
 
      }
    }
 
 
      xhr.open("GET","index2.php?option=com_user&task=listcity&country_id="+country_id,true);
      xhr.send(null);
}
</script>

Шаг 2

2- В controller.php добавьте функцию, например listcity, показанная в следующем примере:


function listcity()
  { 
 
     global $mainframe;
     $country_id=JRequest::getVar( 'country_id');
     $model = $this->getModel('register');
     $states = $model->getStates($country_id);
 
     $return = "<?xml version=\"1.0\" encoding=\"utf8\" ?>";
     $return .= "<options>";
     $return .= "<option id='0'>".JText::_( '---Select city---' )."</option>";
     if(is_array($states)) {
        foreach ($states as $state) {
                $return .="<option id='".$state->state_id."'>".JText::_($state->state_name)."</option>";
        }
      }
      $return .= "</options>";
      echo $return;      
      $mainframe->close();
 
  }


3- Здесь используется метод getStates($country_id), зарегистрированный в модели, для извлечения списка стран, можете использовать другой подход и адаптировать под свои нужды.
Источник
+1

Комментарии:0

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.