Хак Virtuemart - редактирование цен на товар в списке товаров

There is no translation available, please select a different language. English  Finnish (Suomi) 

Хак для 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;
/*  Хак - конец */

Contacto

518 4067
220 5532

icq 255018290

info@redsoft.ru

 

 

Redsoft-участник top25 рейтинга рунета

Redsoft - участник Top25
рейтинга студий России