остальные действия:
файл:
...\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)
в этом файле все.
И на этом все. Предупрежу еще раз, что делалось по-дилетантски, поэтому, возможно, в функциях есть лишние действия, обращения к базе и тп. Уж не обессудьте.