Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 10389 Просмотров
*

ZeRa

  • Новичок
  • 9
  • 0 / 0
 8) Взял у умного человека, который взял (недоделанную версию) у буржуев, помучился день, и вон есть! ВСЁ работает!  *DRINK*
В интернет-магазине VirtueMart для изменения количества товаров на складе необходимо зайти в сам товар в админке. Данное решение изменяет ситуацию. Очень удобно, в итоге должно выглядеть примерно так


и


Вперед! Если пьете пиво, отложите сей труд на потом ;)

Файлы которые надо изменить:

    administrator/components/com_virtuemart/html/product.ajax_tools
    administrator/components/com_virtuemart/html/product.product_list
    administrator/components/com_virtuemart/languages/common/russian.php

Открываем файл product.ajax_tools, находим 82 строку (если у вас не изменялся этот файл) или поиском, после этих строк

Код
vmConnector::sendHeaderAndContent( 200, $content );
 break;

Вставляем

Код
case 'getstockform':
 include_class('product');
 $product_id = intval( vmGet( $_REQUEST, 'product_id' ));
 $stock = $ps_product->get_field($product_id,'product_in_stock');
 $formName = 'stockForm';
 $content = '<form id="'.$formName.'" method="post" name="stockForm">';
 $content .= '<table class="adminform"><tr><td><strong>'.$VM_LANG->_('PHPSHOP_PRODUCT_FORM_IN_STOCK').':</strong></td><td><input type="text" name="product_in_stock" value="'.$stock.'" class="inputbox" id="product_in_stock_'.$formName.'" size="11" /></td></tr>';
 $content .= '<input type="hidden" name="product_stock_id" value="'.$stock.'" id="product_stock_id_'.$formName.'" />';
 $content .= '<input type="hidden" name="product_id" value="'.$product_id.'" />';
 $content .= '<input type="hidden" name="func" value="productStockUpdate" />';
 $content .= '<input type="hidden" name="ajax_request" value="1" />';
 $content .= '<input type="hidden" name="no_html" value="1" />';
 $content .= '<input type="hidden" name="vmtoken" value="'.vmSpoofValue($sess->getSessionId()).'" />';
 $content .= '<input type="hidden" name="option" value="'.$option.'" />';
 $content .= '</form>';
 vmConnector::sendHeaderAndContent( 200, $content );
 break;

Далее идем в файлproduct.product_list (administrator/components/com_virtuemart/html) и после строк

Код
$search_sql = " (#__{vm}_product.product_name LIKE '%$keyword%' OR \n";
$search_sql .= "#__{vm}_product.product_sku LIKE '%$keyword%' OR \n";

вставляем

Код
$search_sql .= "#__{vm}_product.product_in_stock LIKE '%$keyword%' OR \n";
чуть ниже изменяем следующую строку

Код
 $list = "SELECT #__{vm}_category.category_name,#__{vm}_product.product_id,#__{vm}_product.product_name,#__{vm}_product.product_sku,#__{vm}_product.vendor_id,product_publish, product_list, product_full_image, product_thumb_image";

на эту

Код
 $list = "SELECT #__{vm}_category.category_name,#__{vm}_product.product_id,#__{vm}_product.product_name,#__{vm}_product.product_sku,#__{vm}_product.product_in_stock,#__{vm}_product.vendor_id,product_publish, product_list, product_full_image, product_thumb_image";


далее находим строки

Код
$VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE') => "width=\"10%\"",
$VM_LANG->_('PHPSHOP_CATEGORY') => "width=\"15%\"" );

изменяем и добавляем вот это

Код
$VM_LANG->_('PHPSHOP_PRODUCT_FORM_IN_STOCK') => "width=\"5%\"",
$VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE') => "width=\"15%\"",
$VM_LANG->_('PHPSHOP_CATEGORY') => "width=\"10%\"" );

после строк

Код
// The product sku
$listObj->addCell( $db->f("product_sku") );

вставляем это

Код
 // The product current stock
 $tmp_cell = '<span class="editable priceform">'.$db->f("product_in_stock").'   ';
 $listObj->addCell( $tmp_cell, 'id="'.$db->f('product_id').'" onclick="showStockForm(this.id)" title="'.$VM_LANG->_('PHPSHOP_PRODUCT_FORM_IN_STOCK').'"' );


находим строки

Код
<script type="text/javascript">
var priceDlg = null;

после них вставляем

Код
var stockDlg = null;

находим строку

Код
title:'<?php echo $VM_LANG->_('PHPSHOP_PRICE_FORM_LBL')?>',
 msg: o.responseText,
 buttons: Ext.Msg.OKCANCEL,
 fn: handleResult

изменяем fn: handleResult на fn: handleResultPrice

и добавляем ниже этих строк

Код
fn: handleResultPrice
 });
 }};
 Ext.Ajax.request({method:'GET', url: sUrl, success: callback.success });
}

новый метод

Код
function showStockForm(prodId) {
 
 // define some private variables
 var showBtn;
 sUrl = '<?php $sess->purl( $mm_action_url .'index3.php?page=product.ajax_tools&task=getStockForm&no_html=1', false, false, true )?>&product_id=' + prodId;
 callback = { success : function(o) {
 
 stockDlg = Ext.Msg.show({
 width:300,
 height:250,
 title:'<?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_IN_STOCK')?>',
 msg: o.responseText,
 buttons: Ext.Msg.OKCANCEL,
 fn: handleResultStock
 });
 }};
 Ext.Ajax.request({method:'GET', url: sUrl, success: callback.success });
}

Изменяем название метода function handleResult( btn ) на function handleResultPrice( btn ), далее после измененного нами метода

Код
function handleResultPrice( btn ) {
 switch( btn ) {
 case 'ok':
 submitPriceForm( 'priceForm' );
 break;
 case 'cancel':
 break;
 }
}

вставляем еще один

Код
function handleResultStock( btn ) {
 switch( btn ) {
 case 'ok':
 submitStockForm( 'stockForm' );
 break;
 case 'cancel':
 break;
 }
}
После строк

Код
upload : function(o){
 //Ext.DomHelper.insertHtml( 'beforeEnd', document.body, o.responseText );
 showDialog( o.responseText );
 }
 };
 
 Ext.Ajax.request({method:'POST', url: '<?php echo $_SERVER['PHP_SELF'] ?>', success: callback.success, failure: callback.failure, form: formId});
 
}
Вставляем несколько методов

Код
function submitStockForm(formId) { 
 // define some private variables
 var dialog, showBtn, hideTask;
 
 function showDialog( content ) {
 var msgbox = Ext.Msg.show( {
 title: '<?php echo $VM_LANG->_('PEAR_LOG_NOTICE')?>',
 msg: content,
 autoCreate: true,
 width:300,
 height:150,
 fn: msgBoxClick,
 modal: false,
 resizable: false,
 buttons: Ext.Msg.OK,
 shadow:true,
 animEl:Ext.get( 'vm-toolbar' )
 });
 // This Dialog shows the result of the price update. We want it to autohide after 3000 seconds
 // Here we need to use "DelayedTask" because we need to cancel the autohide function if the user clicked
 // the dialog away
 hideTask = new Ext.util.DelayedTask(msgbox.hide, msgbox);
 hideTask.delay( 3000 );
 }
 
 var msgBoxClick = function(result) {
 if( result == 'ok' ) {
 hideTask.cancel();
 }
 };
 // return a public interface
 var callback = {
 success: function(o) {
 //Ext.DomHelper.insertHtml( document.body, o.responseText );
 
 showDialog( o.responseText );
 },
 failure: function(o) {
 Ext.Msg.alert('Error!', 'Something went wrong while posting the form data (possibly 404 error).');
 },
 upload : function(o){
 //Ext.DomHelper.insertHtml( 'beforeEnd', document.body, o.responseText );
 showDialog( o.responseText );
 }
 };
 
 Ext.Ajax.request({method:'POST', url: '<?php echo $_SERVER['PHP_SELF'] ?>', success: callback.success, failure: callback.failure, form: formId});
 
}
function cancelStockForm(id) {
 updateStockField( id );
}
function updateStockField( id ) {
 sUrl = '<?php $sess->purl( $mm_action_url .'index3.php?option=com_virtuemart&no_html=1&page=product.ajax_tools&task=getstock&formatStock=1', false, false, true )?>&product_id=' + id;
 callback = { success : function(o) { Ext.get("stockform-dlg").innerHTML = o.responseText; }};
 Ext.Ajax.request({method:'GET', url: sUrl, success:callback.success });
}
 

ниже находим строку $formName = uniqid('priceForm'); и заменяем ее на

Код
$formPriceName = uniqid('priceForm');
$formStockName = uniqid('stockForm');

и в последнюю строчку файла добавляем

Код
<div id="stockform-dlg"></div>

Этот файл изменен, идем в administrator/components/com_virtuemart/languages/common/russian.php и добавляем строки перевода

Код
'VM_PRODUCT_STOCK_UPDATED' => 'Количество товара обновлено',
'VM_PRODUCT_STOCK_UPDATING_FAILED' => 'Не обновлено, ошибка',
С изменениями файлов - все. Теперь закидываем файл ps_product_stock в классы (administrator/components/com_virtuemart/classes) и регистрируем функцию. Идем в админке VirtueMart - Настройки - Список модулей - admin - Список функций и добавляем функцию

    ИМЯ productStockUpdate
    ИМЯ КЛАССА ps_product_stock
    МЕТОД КЛАССА update
    ПРАВА НА ФУНКЦИЮ admin,storeadmin

любуемся результатом.

файлы приложить не могу, поэтому даю ссылки на скачивание  (с буржуев):
http://forum.virtuemart.net/archive/index.php?action=dlattach;topic=59460.0;attach=14321
http://forum.virtuemart.net/archive/index.php?action=dlattach;topic=59460.0;attach=11357
помошники и источники: http://forum.virtuemart.net и http://virtuemart-shopscript.com
УРА!  yes!
*

Diver2k4

  • Новичок
  • 2
  • 0 / 0
Разобрался. Без пива)) Все работает  :D (J 1.5.23 + VM 1.1.9)
Большое спасибо за мануал. Видел похожее решение в интернетах, но без возможности изменения количества товара из админки, только отображение.
Ваше решение намного удобнее)))
 *DRINK*
*

Ecspert

  • Захожу иногда
  • 426
  • 12 / 0
*

Алекс82

  • Захожу иногда
  • 120
  • 4 / 0
  • Совсем новичок
авторам спасибо, все работает, только количество товара в админке меняется после обновления. Может кто подскажет?
*

Timofey

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Странно у меня нет ИМЯ КЛАССА ps_product_stock где это можно исправить что то не понятно откуда этот файл вообще брать
« Последнее редактирование: 13.11.2012, 21:47:50 от Timofey »
*

Timofey

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Всё разобрался только теперь окно не появляеться и вообще не чего не происходит при нажатие на кол-во товара
*

newjey

  • Захожу иногда
  • 405
  • 2 / 0
Не получается скачать файлы, может кто-то залить их?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Сортировка товаров по дате поступления

Автор coob

Ответов: 2
Просмотров: 2238
Последний ответ 21.06.2018, 08:40:05
от kungurskiy
Сортировка товаров категории по алфавиту

Автор atlet

Ответов: 5
Просмотров: 1480
Последний ответ 20.11.2015, 18:33:50
от atlet
404 для товаров которые удалены

Автор holovla

Ответов: 1
Просмотров: 1849
Последний ответ 06.05.2015, 19:42:13
от holovla
Модуль VirtueMart для фильтра товаров по категориям!

Автор maxmur

Ответов: 104
Просмотров: 51050
Последний ответ 08.08.2014, 11:47:37
от Хусен
Компонент и модуль поиска товаров VirtueMart 1.0.15 на Ajax

Автор Arkadiy

Ответов: 148
Просмотров: 64024
Последний ответ 28.06.2014, 19:11:54
от DeLight