VirtueMart 1.1.9
Почти сделал. Осталось сделать вывод установленной скидки в категории.
В файле administrator\components\com_virtuemart\html\product.product_category_form.php
строка примерно 70, после
<input type="text" class="inputbox" name="category_name" size="60" value="<?php echo shopMakeHtmlSafe( $db->sf('category_name'))?>" />
</td>
</tr>
добавить
<tr>
<td width="21%" nowrap><div align="right"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_DISCOUNT_TYPE')?>:</div>
</td>
<td width="79%" ><?php
require_once( CLASSPATH.'ps_product_discount.php' );
echo ps_product_discount::discount_list( $db->sf("product_discount_id") ); ?>
</td>
</tr>
Это выводит селект со списком скидок. Тут можно будет выбирать нужную скидку на все товары данной категории.
Далее, сразу после этого добавить
<?php
$product_discount_id = $db->sf("product_discount_id");
$sql = 'SELECT product_id FROM jos_vm_product_category_xref WHERE category_id = ' . $category_id;
$result_select_query = mysql_query( $sql );
while($row = mysql_fetch_row($result_select_query)){
$sql2 = 'UPDATE jos_vm_product SET product_discount_id = ' . $product_discount_id . ' WHERE product_id = ' . $row[0];
mysql_query( $sql2 );
}
?>
Это назначает id скидки всем товарам данной категории. Работает.
Но вот после выбора скидки в категории и после сохранения, если опять открыть эту категорию, то выбранная скидка в селекте со списком скидок, не будет отображаться.
Придумал два варианта
1. создать в таблице с категориями jos_vm_category поле discount_id и туда тоже записывать id выбранной скидки. И при выводе селекта со скидками учитывать это поле и в соответствие с ним устанавливать нужное значение в селекте.
2. при выводе селекта со списком ссылок смотреть, какой id скидки присвоен какому-нибудь товару из данной категории и учитывая это назначать нужное значение в селекте.
Второй вариант хуже, потому что вдруг какому-нибудь товару из данной категории будет назначена другая скидка, а проверка учтет именно этот товар и в результате всем другим товарам будет переназначена другая скидка.
Поэтому я делаю первый вариант. Нужно добавить поле category_discount_id в таблицу jos_vm_category, сделать sql запрос в БД
ALTER TABLE jos_vm_category ADD category_discount_id INT(11) NOT NULL
В том же файле product.product_category_form.php дописать код, после
добавить
$sql3 = 'UPDATE jos_vm_category SET category_discount_id = ' . $product_discount_id . ' WHERE category_id = ' . $category_id;
mysql_query( $sql3 );
Теперь у каждой категории будет id назначенной скидки.
Осталось научить селект со скидками узнавать какую скидку он должен показать при открытие категории для редактирования.
В файле administrator\components\com_virtuemart\classes\ps_product_discount.php есть строки
$selected = $db->f( "discount_id" ) == $discount_id ? "selected=\"selected\"" : "" ;
$html .= "<option id=\"$id\" value=\"" . $db->f( "discount_id" ). "\" $selected>" . $db->f( "amount" ) ;
вроде тут назначается selected для той option которая соответствует присвоенной скидки. Тут я не знаю как дальше делать, подскажите. Нужно дописать условие для категории.