NPJ next: xAJAX ...

Главная | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  

Пример

здесь (смотреть лучше под FF, потому что tinyMCE какой-то попался кривой и под IE не пашет, а возиться с ним я не буду, потому что это просто пример...) UPD: ok-ok, это мои кривые руки, все работает! (Aналогично под CI, можно посмотреть здесь)


Bugs: в Манифесто в core/classes/State Set.php? возникли небольшие затруднения, пришлось закомментить пару строк.
Вообще, аякс чувствителен к предупреждениям, которые вылезают в движке (а их, увы, много).
Библиотеки (xajax и tinyMCE) лежат в папке lib/
Настройки модуля лежат в /npj_config.php, а обратиться к ним можно из любого места как к 
$this->rh->modules["имя_модуля"]["что-то_там"]


Tips & Tricks



Вот это лежит в отдельном каталоге модуля:

classes/Upload Subspace.php?


Называться может, в принципе, как угодно, имя файла указывается в npj_config.php – файле конфигурации модуля, лежащего в верхней папке модуля.


UPD: Конструктор должен выглядеть вот так. Но движок все равно нужно дебажить.

<?
 
function UploadModule ( &$rh$base_href$module_config, &$object ) {
      
NpjModule::NpjModule( &$rh$base_href$module_config, &$object );
      
// $this->config["upload"]  = array(); // override config
  
}
?>


<?php
/*

    UploadSubspace
    
    ---------- за основу взят:

    Демо "модуль субпространства"

    ModuleDemoSubspace( &$rh, $base_href, $message_set, $section_id=0, $handlers_dir="", $messageset_dir="" )
      - $message_set -- какой присоединить набор с сообщениями для вывода?
      - $section_id -- идентификатор гигантского раздела сайта (не группы внутри модуля)
      - $handlers_dir, $messageset_dir -- в замену стандартным из $rh->..

  ---------

========================================= v.1 (kuso@npj)
*/

define ('DEBUG'false);  // дебаггер xajax


class UploadSubspace extends NpjModule
{
  var 
$module_name "UploadSubspace"// for use in debug
  
var $xajax;
  
  
  function 
_initXajax() {

        
// AJAX
        
define ('AJAXPATH'$_SERVER['DOCUMENT_ROOT'].'/lib/xajax');
        require_once(
AJAXPATH."/xajax_core/xajax.inc.php");
        
        
$this->xajax =& new xajax();
        
$this->xajax->configure('javascript URI''/lib/xajax');
        if (
DEBUG$this->xajax->configure('debug'true);
        
                
// здесь регистрируем функции, которые работают асинхронно
        
$this->xajax->registerFunction(array("process_form_data", &$this"process_form_data"));
        
$this->xajax->processRequest();
        
  }
  
  
// эта функция через аякс. В js ей должна соответствовать функция xajax_process_form_data, т.е. должно начинаться с xajax_
  // и так для всех, если их много
  
function process_form_data($form_data) {
      
      
$objResponse = new xajaxResponse();
                
      
$result $form_data['content_area'];
      if (
$result===''$result='nothing...';
                
      
$objResponse->assign("div_result""innerHTML"$result);
      return 
$objResponse;
  }
        
        
  
// тут происходит выбор хэндлера на основе введенного урла
  
function Init$rel_url )    
  {
    
$this->method "default";
    
$this->params = array();
    
$parts explode("/"trim($rel_url,"/"));
   
    if (
$rel_url == "xajax")          
    {
      
$this->_initXajax();    
      
$this->method "xajax";
      
$this->params $parts;
      
array_shift($this->params);
    }
 
    
    
  }

// EOC { UploadSubspace }
}


?>


templates/xajax.html


{{TEMPLATE:Xajax}}
    <!-- xajax JavaScript-->
    {{_xajax}}

    <!-- tinyMCE -->
  <script type="text/javascript" src="{{_tinymce}}"></script>
  <script type="text/javascript">
    tinyMCE.init({
      mode : "exact",
      theme : "advanced",
          elements : "content_area",
          convert_urls : false,
          relative_urls : false,
    });
  </script>
  <!-- /tinyMCE -->
  
  <script language="javascript" type="text/javascript">
      function do_submit() {    
        tinyMCE.triggerSave(false, false); 
          xajax_process_form_data(xajax.getFormValues('form_tinymce', false, 'content'));
      }
  </script>

  <div id="form_tinymce" name="form_tinymce" align="center">
     <form method="post" action="#" onsubmit="do_submit(); return false;">
      <textarea id="content_area" name="content_area" rows="20" cols="60"></textarea>
      <br>
       <input type="submit" name="save" value="Submit" />
      <input type="reset" name="reset" value="Reset" />

     </form>
  </div>

  <hr>
  <div id="div_result" class="center"><i>Your text...</i></div>

{{/TEMPLATE:Xajax}}


handlers/xajax.php


Самый обычный, следует только обратить внимание, что переменные, передаваемые в шаблон, должны
передаваться через объект движка шаблонов, создаваемого в самом хэндлере (а не через $tpl, который парсит шаблоны общих для всего НПЖ шкур).


<?php


  $TE 
= &$this->GenerateTemplateEngine$this->config["template_engine"] );

  
  
  
$TE->Assign("_xajax"$this->xajax->getJavascript() );
  
$TE->Assign("_tinymce""/lib/tiny_mce/tiny_mce_src.js");
  
  
$tpl->Assign("Html:TITLE",        $this->module_name.": ".$tpl->GetValue("Preparsed:TITLE") );
  
$tpl->Assign("Preparsed:TITLE",   "" );
  
$tpl->Assign("Preparsed:CONTENT"$TE->Parse("xajax.html") );
  
$tpl->Assign("Preparsed:TIGHT"1);
  
$tpl->Assign("Preparsed:TIGHT_COMMENTS"1);

  return 
GRANTED;

?>


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]