Если Вы используете на сайте 2 разных шаблона для главной страницы и для внутренних. То может появится проблема с virtuemart 1.1.х при оформлении заказа или при обновлении или удалении товаров в корзине магазина. Проблема заключается в том что при клике на кнопку “Оформить заказ” или обновить Вас переадресуют на главную страницу вот так: http://ваш-сайт.ру/index.php а на ней к примеру совсем отсутствует вывод содержания компонентов или вид отличается от задуманного для корзины. В таком случае можно решить проблему следующим образом:
Откройте файл:
/administrator/components/com_virtuemart/html/basket.php
И в строке
// UPDATE CART / DELETE FROM CART $action_url = $mm_action_url.basename($_SERVER['PHP_SELF']);</pre> <p> Замените PHP_SELF на REQUEST_URI </p> <pre class="brush:php">// UPDATE CART / DELETE FROM CART $action_url = $mm_action_url.basename($_SERVER['REQUEST_URI']);
В файле
/administrator/components/com_virtuemart/classes/ps_checkout.php
Замените код
// Redirect to the last step when there's only one payment method if( $VM_CHECKOUT_MODULES['CHECK_OUT_GET_PAYMENT_METHOD']['order'] != $VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'] ) { if ($count <= 1 && $cc_payments==false) { vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&payment_method_id=$first_payment_method_id&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false ),""); } elseif( isset($order_total) && $order_total <= 0.00 ) { // In case the order total is less than or equal zero, we don't need a payment method vmRedirect($sess->url(SECUREURL.basename($_SERVER['PHP_SELF'])."?page=checkout.index&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false),""); } }
На
// Redirect to the last step when there's only one payment method if( $VM_CHECKOUT_MODULES['CHECK_OUT_GET_PAYMENT_METHOD']['order'] != $VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'] ) { if ($count <= 1 && $cc_payments==false) { vmRedirect($sess->url(SECUREURL.basename($_SERVER['REQUEST_URI'])."?page=checkout.index&payment_method_id=$first_payment_method_id&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false ),""); } elseif( isset($order_total) && $order_total <= 0.00 ) { // In case the order total is less than or equal zero, we don't need a payment method vmRedirect($sess->url(SECUREURL.basename($_SERVER['REQUEST_URI'])."?page=checkout.index&ship_to_info_id=$ship_to_info_id&shipping_rate_id=".urlencode($shipping_rate_id)."&checkout_stage=".$VM_CHECKOUT_MODULES['CHECK_OUT_GET_FINAL_CONFIRMATION']['order'], false, false),""); } }
В файле
/administrator/components/com_virtuemart/html/checkout.index.php
// We have something in the Card so move on if ($perm->is_registered_customer($auth['user_id'])) { // user is logged in and a registered customer $basket_html .= '<form action="'. SECUREURL.basename($_SERVER['PHP_SELF']) .'" method="post" name="adminForm">
На
// We have something in the Card so move on if ($perm->is_registered_customer($auth['user_id'])) { // user is logged in and a registered customer $basket_html .= '<form action="'. SECUREURL.basename($_SERVER['REQUEST_URI']) .'" method="post" name="adminForm">
В файле
/administrator/components/com_virtuemart/classes/ps_userfield.php
if( $startForm ) { echo '<form action="'. $mm_action_url .basename($_SERVER['PHP_SELF']) .'" method="post" name="adminForm">'; }
На
if( $startForm ) { echo '<form action="'. $mm_action_url .basename($_SERVER['REQUEST_URI']) .'" method="post" name="adminForm">'; }
ВсЁ. Есть и другие способы, но я решил так. Гугл в помощь если что.