Передача формы с большим количеством input полей

16.11.2016

Бывает, что на одной странице нужно вывести несколько сотен полей ввода, естественно с отправкой такого количества возникают проблемы.

В частности в Joomla, когда много элементов, то может не работают кнопки "опубликовать" / "снять с публикации и подобные".

Решение - на стороне клиента, переделать все чекбксы в один список, снимать галочки с отмеченных и отправлять на сервер только одну строку.

В файле где расположен вывод формы /administrator/components/com_soshop/views/NAME/tmpl/default.php нужно добавить:

 
<script>
(function($){
$(function() {
    Joomla.submitbutton = function(task) {

        if (task == 'accessories.publish' || task == 'accessories.unpublish') {
            var aRet = [],
            	items = $('input[name = "cid[]"]')
            ;
            
            items.each(function( index, value ){
            	var el = $(this);
            	if(el.prop("checked")) {
					aRet.push(el.val());
				}
            });

            items.prop("checked", false);
            $("#so_cid").val(aRet.join (","));
        }

        Joomla.submitform(task, document.getElementById('adminForm'));
    }
});
})(jQuery);
</script>

и

 
            <input type="hidden" id="so_cid" name="so_cid" value="" />



А в файл контроллера, который обрабатывает полученные данные /administrator/components/com_soshop/controllers/NAME.php нужно изменить:

 
	public function publish()
	{
      $input = JFactory::getApplication()->input;
      $so_cid = $input->get('so_cid', '', 'RAW');
     
/*
      // Get items to publish from the request.
      $cid = JFactory::getApplication()->input->get('cid', array(), 'array');
      
      echo '<pre>';
	  print_r($cid);
      echo '</pre>';
*/
 
      if($so_cid)
	  {
	    $input->set('cid', explode(',', $so_cid), 'array'); //explode(',', $so_cid)
	  }
       
	  parent::publish();
    }


Категории: CMS Joomla 3.X, Joomla
Пометки: Проблема с обработкой больших объемов данных в административной панели
Яндекс.Метрика