Новости Joomla

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

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
Например, во вкладке "Товары на складе" есть колонка - Количество.
Как сделать ее редактируемой, наподобие колонки (порядок отображения) в "товарах", куда можно вводить числа и сохранять их сразу же (имею ввиду колонку A-Z и дискета).
Если кто-нибудь уже встречал подобное описание в других разделах, укажите пож-та, сам ничего не смог найти.
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
Решение сделано, правил три файла, выкладываю их тут.
Редактируемая колонка "кол-во на складе" будет в списке товаров.
версия Вирта - 1.1.6

...\administrator\components\com_virtuemart\html\product.product_list.php
тут добавил поле в таблицу, заодно отключил поле "производитель"

...\administrator\components\com_virtuemart\classes\htmlTools.class.php
в этом файле добавил функции, относящиеся к выводу значений и кнопке "сохранить"

...\administrator\components\com_virtuemart\classes\vmAbstractObject.class.php
в этом файле добавлен алгоритм сохранения.

Кроме этого, нужно добавить строку в MySQL базу, (регистрируем функцию):
таблица -  jos_vm_function
выбираем вкладку insert и вводим значения:
function_id  - 195
module_id  - 1
function_name  - savestock
function_class  - vmAbstractObject.class
function_method  - handlestock
function_perms  - admin

жмем GO

должно получиться такое же поле как (id 171 у меня) "function_name - changeordering", но другие поля function_name и function_method.


Сделано, прямо скажу, коряво, хотя и работает. Добавлял функции "по наитию", по образцу колонки "порядок отображения", методом тыка.
Если кому-то пригодится - пожалуйста. Если кто-то найдет глюки или подчистит код - спасибо заранее, если не трудно выложите исправленные файлы.

[вложение удалено Администратором]
« Последнее редактирование: 10.02.2011, 08:53:35 от Evgg »
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
Выглядит так.
(картинка в архиве)

[вложение удалено Администратором]
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
что менял:

файл:
...\administrator\components\com_virtuemart\html\product.product_list.php
1. в строку 81 (тут и далее, номер строки в моей версии, у вас может отличаться)
$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";

добавил, в конец - product_in_stock";
получилось, в конце строки - ...product_full_image, product_thumb_image, product_in_stock";

2. строки 262, 264 - закомментил, это строка, отвечающая за вывод шапки колонки "производитель", если она вам нужна, то "коменировать" ее не надо

//$columns[$VM_LANG->_('PHPSHOP_MANUFACTURER_MOD')] ="width=\"10%\"";  
} else {
//$columns[$VM_LANG->_('PHPSHOP_MANUFACTURER_MOD')] ="width=\"10%\"";  
}

3. после фигурной скопки за вышеуказанной строкой добавил строку
$columns[vmCommonHTML::getSaveStockButton( $num_rows, 'savestock' )] ='width="6%"';

(добавил перед строкой
$columns[$VM_LANG->_('PHPSHOP_REVIEWS')] ="width=\"10%\"";  )

4. закомментил строку  270, строка вывода шапки - "отзывы". Если вам нужна - не закомменчивайте.
//$columns[$VM_LANG->_('PHPSHOP_REVIEWS')] ="width=\"10%\"";

5. строку
$listObj->addCell( $ps_product->get_mf_name($db->f("product_id")) );  (
удаляем, но если нужна колонка "производитель" - удалять не надо.
Вместо этой строки или под нее (если не удаляли) добавляем строку:

$listObj->addCell( vmCommonHTML::getStockField( $db->f('product_in_stock') ) );

далее, блок, отвечающий за вывод  колонки - "отзывы". Если он нужен оставляем. У меня он удален целиком.

/** удалить или закомментить
$db_cat->query("SELECT count(*) as num_rows FROM #__{vm}_product_reviews WHERE product_id='".$db->f("product_id")."'");
      $db_cat->next_record();
      if ($db_cat->f("num_rows")) {
         $tmpcell = $db_cat->f("num_rows")." ";
         $tmpcell .= "<a href=\"".$_SERVER["PHP_SELF"]."?option=com_virtuemart&page=product.review_list&product_id=".$db->f("product_id")."\">";
         $tmpcell .= "[".$VM_LANG->_('PHPSHOP_SHOW')."]</a>";
      }
      else {
         $link = $sess->url( $_SERVER['PHP_SELF'].'?page=product.review_form&product_id='.$db->f('product_id'));
         $text = '['.$VM_LANG->_('VM_REVIEW_FORM_LBL').']';
         $tmpcell = " - <a href=\"$link\">$text</a>\n";
      }
      $listObj->addCell( $tmpcell );
      */

позже напишу остальные действия
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
остальные действия:

файл:
...\administrator\components\com_virtuemart\classes\htmlTools.class.php

после строк (но можно, вроде, вставить в любое место файла)
   function getOrderingField( $ordering ) {
      return '<input type="text" name="order[]" size="5" value="'. $ordering .'" class="text_area" style="text-align: center" />';
   }

вставляем строки (две функции):
   function getSaveStockButton( $num_rows, $funcname='reorder') {  //Evg wrote
      global $mosConfig_live_site, $VM_LANG;
      $n = $num_rows-1;
      $html = '<a href="javascript: document.adminForm.func.value = \''.$funcname.'\'; saveorder( '.$n.' );">na sklade
            <img src="'.$mosConfig_live_site.'/administrator/images/filesave.png" border="0" width="16" height="16" alt="'.$VM_LANG->_('VM_SORT_SAVE_ORDER').'" /></a>';
      
      return $html;
   }
   function getStockField( $instock ) {  //Evg added similar as above
       return '<input type="text" name="orderr[]" size="5" value="'. $instock .'" class="text_area" style="text-align: center" />';
   }
   
в этом файле все.



файл:
...\administrator\components\com_virtuemart\classes\vmAbstractObject.class.php

перед строкой:
function changeOrdering( $table, $name, $k, $entity_name, $where='', $table2_name='' ) {

вставляем строки
      function handlestock( &$d ) {  //evg wrote
      global $vmLogger, $page, $VM_LANG;
      $where = '';
      $table2_name = '';
      
      if( $page == 'product.product_list' ) {
         //   $table2_name = "#__{vm}_product_category_xref";
            $table_name = "#__{vm}_product";
            $order_field_name = 'product_in_stock';
            $field_name = 'product_id';
            $entity_name = 'product_name';
         //   $where = '`category_id`='.intval($d['category_id']);
      }
      else {
         $vmLogger->err( $VM_LANG->_('VM_ABSTRACTOBJECT_REORDER_ERR_TYPE') );
         return false;
      }
      return $this->savestock( $table_name, $order_field_name, $field_name, $entity_name, $where, $table2_name );
   }


   function savestock( $table, $name, $k, $entity_name, $where='', $table2_name='' ) {
      global $db, $vmLogger;
      
            
      
      $i = 0;
      foreach( $_REQUEST[$k] as $item ) {
            $sql = "UPDATE `$table` SET `$name` =".intval($_REQUEST['orderr'][$i])." WHERE `$k`=".intval($item); //orderr was order
            $sql .= ($where ? "\n   AND $where" : '');
            $db->query( $sql );
            $i++;
         }
         $this->fixStock($table, $name, $k, $where );
      
      return true;
   }

   function fixStock( $table, $name, $k, $where ) {
      global $db, $vmLogger;
      
      $sql = "SELECT `$k`, `$name` ";
      $sql .= "FROM `$table` ";
   //   $sql .= "WHERE `$k`=".intval(@$_REQUEST[$k]);
      $sql .= ($where ? "\n   AND $where" : '');
      
      $db->query( $sql );
      $db->next_record();
      
      $this->$k = $db->f($k);
      $this->$name = $db->f($name);
   
      $query = "SELECT $k, `$name`"
      . "\n FROM `$table`"
      . ($where ? "\n   WHERE $where" : '')
      . "\n ORDER BY `$name`"

      ;

      $db->setQuery( $query );
      if (!($orders = $db->loadObjectList())) {
         $vmLogger->err( $db->getErrorMsg() );
         return false;
      }
      
      // first pass, compact the ordering numbers
      $n=count( $orders );      
      for ($i=0; $i < $n; $i++) {
         if ($orders[$i]->$name >= 0) {
            $orders[$i]->$name = $i+1;
         }
      }

      return true;
   }

Это три ф-ции, которые "синтезированы" из аналогичных, относящихся к порядку отображения (fixOrdering, changeOrdering, handleOrdering)
в этом файле все.

И на этом все. Предупрежу еще раз, что делалось по-дилетантски, поэтому, возможно, в функциях есть лишние действия, обращения к базе и тп. Уж не обессудьте.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не выводит списком Настраиваемое поле в VirtueMart 5.0

Автор ЛюдмилаМир

Ответов: 2
Просмотров: 1738
Последний ответ 25.08.2019, 16:27:04
от ЛюдмилаМир
Сортировка в админке VirtueMart

Автор r_sosnovskiy

Ответов: 2
Просмотров: 1648
Последний ответ 20.05.2018, 23:56:05
от r_sosnovskiy
Как дать доступ только к VirtueMart в админке?

Автор borro

Ответов: 3
Просмотров: 1136
Последний ответ 16.02.2018, 17:18:40
от Sandruk1
Как сделать импорт товара на VirtueMart?

Автор Усач911

Ответов: 0
Просмотров: 934
Последний ответ 07.11.2017, 22:03:18
от Усач911
VirtueMart + авторизация в админке

Автор ponaroshku

Ответов: 1
Просмотров: 929
Последний ответ 10.08.2015, 16:18:59
от ponaroshku