Вот долго готовился и вычленив данный патч обновил его с версии VM 1.0.3 (от yAnTar) до версии VM 1.0.10.
Выкладываю построчную правку файлов и сами уже исправленные файлы. Правке подлежат 2 файла.
Только есть небольшая проблема с этой версией магазина, нужна помощь автора хака
. О ней позже.
Итак:Файл /administrator/components/com_virtuemart/html/shop.browse.phpстрока 285:
это:
/*** Start printing out all products (in that category) ***/
while ($db_browse->next_record()) {
// If it is item get parent:
меняем на это:
/*** Start printing out all products (in that category) ***/
echo "<form action=\"". $mm_action_url ."index.php\" method=\"post\" name=\"addtocart\" id=\"addtocart\">".
"<input type=\"hidden\" name=\"page\" value=\"shop.cart\" />\n
<input type=\"hidden\" name=\"func\" value=\"cartadd\" />\n
<input type=\"hidden\" name=\"Itemid\" value=\"$Itemid\" />\n
<input type=\"hidden\" name=\"option\" value=\"com_virtuemart\" />\n";
while ($db_browse->next_record()) {
// If it is item get parent:
строка 393:
это:
/*** Add-to-Cart Button ***/
if (USE_AS_CATALOGUE != '1' && $product_price != "" && !stristr( $product_price, $VM_LANG->_PHPSHOP_PRODUCT_CALL )) {
$form_addtocart = "<form action=\"". $mm_action_url ."index.php\" method=\"post\" name=\"addtocart\" id=\"addtocart".$i."\">\n
<label for=\"quantity_".$i."\">".$VM_LANG->_PHPSHOP_CART_QUANTITY.":</label>\n
<input id=\"quantity_".$i."\" class=\"inputbox\" type=\"text\" size=\"3\" name=\"quantity\" value=\"1\" />
<input type=\"submit\" style=\"text-align:center;background-position:bottom left;width:160px;height:35px;cursor:pointer;border:none;font-weight:bold;font-family:inherit;background: url('". IMAGEURL ."ps_image/".PSHOP_ADD_TO_CART_STYLE ."') no-repeat left center transparent;vertical-align: middle;overflow:hidden;\" value=\"".$VM_LANG->_PHPSHOP_CART_ADD_TO ."\" title=\"".$VM_LANG->_PHPSHOP_CART_ADD_TO."\" />
<input type=\"hidden\" name=\"category_id\" value=\"".@intval($_REQUEST['category_id']) ."\" />\n
<input type=\"hidden\" name=\"product_id\" value=\"". $db_browse->f("product_id") ."\" />\n
<input type=\"hidden\" name=\"page\" value=\"shop.cart\" />\n
<input type=\"hidden\" name=\"func\" value=\"cartadd\" />\n
<input type=\"hidden\" name=\"Itemid\" value=\"$Itemid\" />\n
<input type=\"hidden\" name=\"option\" value=\"com_virtuemart\" />\n
</form>\n";
}
else
$form_addtocart = "";
/*** Now fill the template
меняем на это:
/*** Add-to-Cart Button ***/
if (USE_AS_CATALOGUE != '1' && $product_price != "" && !stristr( $product_price, $VM_LANG->_PHPSHOP_PRODUCT_CALL )) {
$form_addtocart = "\n
<label for=\"quantity_".$i."\">".$VM_LANG->_PHPSHOP_CART_QUANTITY.":</label>\n
<input id=\"quantity_".$i."\" class=\"inputbox\" type=\"text\" size=\"3\" name=\"quantity[]\" value=\"0\" />
<input type=\"hidden\" name=\"category_id[]\" value=\"". @intval($_REQUEST['category_id']) ."\" />\n
<input type=\"hidden\" name=\"product_id[]\" value=\"". $db_browse->f("product_id") ."\" />\n";
}
else
$form_addtocart = "";
/*** Now fill the template
строка 513:
это:
} /*** END OF while loop ***/
echo '<br style="clear:both;" />';
меняем на это:
} /*** END OF while loop ***/
echo "<input type=\"submit\" style=\"text-align:center;background-position:bottom left;width:160px;height:35px;cursor:pointer;border:none;font-weight:bold;font-family:inherit;background: url('". IMAGEURL ."ps_image/".PSHOP_ADD_TO_CART_STYLE ."') no-repeat left center transparent;vertical-align: middle;overflow:hidden;\" value=\"".$VM_LANG->_PHPSHOP_CART_ADD_TO ."\" title=\"".$VM_LANG->_PHPSHOP_CART_ADD_TO."\" />".
"</form>";
echo '<br style="clear:both;" />';
Файл /administrator/components/com_virtuemart/classes/ps_cart.phpстрока: 71
это:
/**
* adds an item to the shopping cart
* @author pablo
* @param array $d
*/
function add(&$d) {
global $sess, $VM_LANG, $cart, $option, $vmLogger;
$d = $GLOBALS['vmInputFilter']->process( $d );
include_class("product");
$Itemid = $sess->getShopItemid();
меняем на это:
/**
* adds an item to the shopping cart
* @author pablo
* @param array $d
*/
function add(&$d) {
global $sess, $VM_LANG, $cart, $option, $vmLogger;
$d = $GLOBALS['vmInputFilter']->process( $d );
/* $array = ($_POST['quantity']);
print (count($array));
die(); */
$arr_product = $_POST['product_id'];
$arr_quantity = $_POST['quantity'];
for ($my_i = 0; $my_i<count($arr_product); $my_i++){
include_class("product");
$Itemid = $sess->getShopItemid();
строка 81:
это:
$product_id = $d["product_id"];
$quantity = isset($d["quantity"]) ? $d["quantity"] : 1;
$_SESSION['last_page'] = "shop.product_details";
// Check for negative quantity
меняем на это:
//$product_id = $d["product_id"];
//$quantity = isset($d["quantity"]) ? $d["quantity"] : 1;
$product_id = $arr_product [$my_i];
$quantity = $arr_quantity [$my_i];
if ($quantity == 0) continue;
$_SESSION['last_page'] = "shop.product_details";
// Check for negative quantity
строка 124:
это:
if ( $db->num_rows()) {
$vmLogger->tip( $VM_LANG->_PHPSHOP_CART_SELECT_ITEM );
return false;
}
// If no quantity sent them assume 1
меняем на это:
if ( $db->num_rows()) {
//$vmLogger->tip( $VM_LANG->_PHPSHOP_CART_SELECT_ITEM );
// return false;
}
// If no quantity sent them assume 1
строка 142:
это:
$GLOBALS['page'] = 'shop.product_details';
$vmLogger->tip( $VM_LANG->_PHPSHOP_CART_SELECT_ITEM );
return true;
меняем на это:
$GLOBALS['page'] = 'shop.product_details';
//$vmLogger->tip( $VM_LANG->_PHPSHOP_CART_SELECT_ITEM );
return true;
строка 179:
это:
$cart = $_SESSION['cart'];
return True;
}
меняем на это:
$cart = $_SESSION['cart'];
}
return True;
}
строка 190:
это:
function update(&$d) {
global $sess,$VM_LANG, $func, $vmLogger;
$d = $GLOBALS['vmInputFilter']->process( $d );
include_class("product");
$db = new ps_DB;
$product_id = $d["product_id"];
$quantity = !empty($d["quantity"]) ? $d["quantity"] : 1;
$_SESSION['last_page'] = "shop.cart";
// Check for negative quantity
меняем на это:
function update(&$d) {
global $sess,$VM_LANG, $func, $vmLogger;
$d = $GLOBALS['vmInputFilter']->process( $d );
$arr_product = $_POST['product_id'];
$arr_quantity = $_POST['quantity'];
for ($my_i = 0; $my_i<count ($arr_product); $my_i++){
include_class("product");
$product_id = $arr_product [$my_i];
$quantity = $arr_quantity [$my_i];
$db = new ps_DB;
/* $product_id = $d["product_id"];
$quantity = !empty($d["quantity"]) ? $d["quantity"] : 1; */
$_SESSION['last_page'] = "shop.cart";
// Check for negative quantity
строка 256:
вставить
Если в чем ошибся, то поправьте меня.
После этого всё работает за исключением одного:
При пересчете позиций в корзине они както не правильно обновляются. Например было 100штук, а я исправил на 85 и нажал пересчитать. Так вот в позиции остается только 8, т.е. первая цифра от числа всегда.
Сам наверно не разберусь в чем проблема, если автор хака или кто-нибудь еще посмотрит и поможет, то буду оооочень благодарен.
Кстати оригинальные файлы от yAnTar на VM 1.0.10 тоже работают с такой ошибкой. Джумла у меня стоит 1.0.10.
Кто может, попробуйте эти файлы у себя.
[вложение удалено Администратором]