Новости Joomla

joomLab Gallery - плагин галереи изображений для Joomla

👩‍💻 joomLab Gallery - плагин галереи изображений для Joomla.Плагин joomLab Gallery позволит Вам добавлять в любой материал неограниченное количество галерей, а главное удобно управлять файлами и эффектами в каждой галерее.Плагин использует популярны скрипты Swiper.js и FancyBox. Первый для крутой организации и эффектов галерей, а второй для красивого и функционального показа оригинальных изображений на Вашем сайте.На данный момент плагин имеет 10 макетов вывода - это 10 различных эффектов галерей и Вы можете совмещать все 10 в 1 материале.Плагин позволяет гибко настраивать индивидуально каждую галерею в материале. Вы можете выбрать макет, эффекты и даже можете управлять функциями всплывающего окна изображения.Недостатки.Такой вид реализации не предусматривает выбор изображения на сервере. Т.е. Вы не можете выбрать уже добавленное фото, только загружать заново. Плагин не предоставляет возможности доступа к медиа-менеджеру.Плагин бесплатный. Разработчик - участник нашего сообщества Александр Новиков (@pro-portal).Страница расширения@joomlafeed#joomla #расширения

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla 🖨Ну что, интересная инициатива от @webtolkru в виде интервью с разными участниками весьма меня увлекла. Я, вооружившись данным примером, решил подготовить выпуск для NorrNext (@norrnext) и экстраполировал идею на международный масштаб. Теперь готовлю эксклюзивный выпуск с участниками Joomla сообщества со всего мира, которые, в той или иной мере, внесли свой вклад в развитие и популяризацию системы. Будут беседы с людьми из разных стран и фото с юбилейной символикой 📸Работа в процессе 👆 📝О результатах оповещу отдельно.

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

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
Просмотров: 2583
Последний ответ 21.06.2018, 08:40:05
от kungurskiy
Сортировка товаров категории по алфавиту

Автор atlet

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

Автор holovla

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

Автор maxmur

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

Автор Arkadiy

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