Бывает, что на одной странице нужно вывести несколько сотен полей ввода, естественно с отправкой такого количества возникают проблемы.
В частности в 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();
}