Хак для virtuemart, позволяющий выводить поля для редактирования цен в списке товаров. Во вкладке товаров, в таблице товаров в заголовке столбца цен появляются 2 иконки - редактирование и сохранения. При нажатии на иконку редактирования отображаются ранее невидимые текстовые поля с ценами. При нажатии на сохранить данные из этих полей с использованием ajax отправляется на сервер
Файл administrator/components/com_virtuemart/html/product.product_list.php
Строка 42
Добавляем
/* Хак - начало
* -----------------------------------------------------------------------
* rs_edit_price - показываем/скрываем текстовые поля редактирования цены
* при нажатии на иконку редактирования в колонке цен
*
* rs_save_price - функция аякс-сохранения цен. Данные из всех полей цен
* выбираются и отправляются на сервер (обрабатываются в файле)
* administrator/com/virtuemart/html/product.ajax_tools.php
* (case 'shesaveprices':)
*
*/
$doc =& JFactory::getDocument();
$script="
var rs_HIDE_INPUTS=1;
function rs_edit_price(){
display=(rs_HIDE_INPUTS)? 'block' : 'none';
Ext.get(Ext.query('.rs_input')).setStyle('display', display);
rs_HIDE_INPUTS=1-rs_HIDE_INPUTS;
}
function rs_save_price(){
var params={};
var rs_inputs = Ext.query('.rs_input');
Ext.each(rs_inputs, function(item,index) {
params['params['+item.getAttribute('rel')+']'] = item.value;
});
var callback = {
success: function(o) {
Ext.Msg.alert('Цены сохранены', o.responseText);
},
failure: function(o) {
Ext.Msg.alert('Error!', 'Цены не были сохранены');
}
};
Ext.Ajax.request({method:'POST', url: '".JURI::Base()."index3.php?page=product.ajax_tools&task=shesaveprices&no_html=1&option=com_virtuemart', success: callback.success, failure: callback.failure, params: params});
}";
$doc->addScriptDeclaration($script);
/* Хак - конец */
Там же, строка 295
Заменяем
// these are the columns in the table
$columns = Array( '#' => '',
"<input type=\"checkbox\" name=\"toggle\" value=\"\" onclick=\"checkAll(".$num_rows.")\" />" => "",
$VM_LANG->_('PHPSHOP_PRODUCT_LIST_NAME') => "width=\"30%\"",
$VM_LANG->_('VM_PRODUCT_LIST_MEDIA') => 'width="5%"',
$VM_LANG->_('PHPSHOP_PRODUCT_LIST_SKU') => "width=\"15%\"",
$VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE') => "width=\"10%\"",
$VM_LANG->_('PHPSHOP_CATEGORY') => "width=\"15%\"" );
На:
/* Хак - начало
* -----------------------------------------------------------------------
* в таблицу в заголовок с ценами добавляем две иконки - сохранить и
* редактировать
*
*/
$price_adds='<a href="javascript::void(null)" onclick="rs_edit_price()"><img src="'.JURI::root().'images/M_images/edit.png" alt="edit" />
<a href="javascript::void(null)" onclick="rs_save_price()"><img style="width:16px" alt="Save" src="'.JURI::root().'images/save_f2.png" /></a>';
// these are the columns in the table
$columns = Array( '#' => '',
"<input type=\"checkbox\" name=\"toggle\" value=\"\" onclick=\"checkAll(".$num_rows.")\" />" => "",
$VM_LANG->_('PHPSHOP_PRODUCT_LIST_NAME') => "width=\"30%\"",
$VM_LANG->_('VM_PRODUCT_LIST_MEDIA') => 'width="5%"',
$VM_LANG->_('PHPSHOP_PRODUCT_LIST_SKU') => "width=\"15%\"",
$VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE').$price_adds => "width=\"10%\"",
$VM_LANG->_('PHPSHOP_CATEGORY') => "width=\"15%\"" );
/* Хак - конец */
Строка 330
Заменяем
$tmp_cell = '<span class="editable priceform">'.$GLOBALS['CURRENCY_DISPLAY']->getValue( $price['product_price']).' '.$price['product_currency'];
$tmp_cell .= ' </span>';
$listObj->addCell( $tmp_cell, 'id="'.$db->f('product_id').'" onclick="showPriceForm(this.id)" title="'.$VM_LANG->_('PHPSHOP_PRICE_FORM_LBL').'"' );
На:
/* Хак - начало
* -----------------------------------------------------------------------
* в ячейку с ценами добавили текстовое поле с ценой, скрытое по умолчанию
* поле доступно для редактирования
*/
$tmp_cell = '<span onclick="showPriceForm('.$db->f('product_id').')" class="editable priceform">'.$GLOBALS['CURRENCY_DISPLAY']->getValue( $price['product_price']).' '.$price['product_currency'];
$tmp_cell .= ' </span>
<div class="rs_div">
<input value="'.$price['product_price'].'" id="rs_input'.$db->f('product_id').'" rel="'.$db->f('product_id').'" class="rs_input" style="display:none" />
</div>';
$listObj->addCell( $tmp_cell, 'id="'.$db->f('product_id').'" title="'.$VM_LANG->_('PHPSHOP_PRICE_FORM_LBL').'"' );
/* Хак - конец */
Файл administrator/components/com_virtuemart/html/product.product_list.php
После строки 155 (break) добавляем:
/* Хак - начало
* -----------------------------------------------------------------------
* из всех текстовых полей с ценами данные передаются в ассоциативный
* массив params (ключи - значения поля "product_id",
* значения - значения поля 'product_price' таблицы #__{vm}_product_price)
*
*/
case 'shesaveprices':
$params = vmGet( $_REQUEST, 'params' );
$db = new ps_DB;
foreach($params as $product_id=>$price){
$q = "UPDATE #__{vm}_product_price SET product_price='".$price."' WHERE product_id='".$product_id."'";
$db->query( $q );
}
echo 'Все цены были успешно сохранены';
break;
/* Хак - конец */