26

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

array(2) {
  ["jh6k9n2vqy"]=>
  array(2) {
    ["product"]=>
    object(Catalog\Model\Orm\Product)#293 (20) {
      ["fast_mark_offers_use":protected]=>
      NULL
      ["fast_mark_multioffers_use":protected]=>
      NULL
      ["fast_mark_virtual_multioffers_use":protected]=>
      NULL
      ["keep_update_prod_cat":protected]=>
      bool(true)
      ["keep_spec_dirs":protected]=>
      bool(false)
      ["cache_visible_property":protected]=>
      NULL
      ["user_cost":protected]=>
      NULL
      ["stock":protected]=>
      NULL
      ["full_stock":protected]=>
      NULL
      ["offer_xcost":protected]=>
      array(0) {
      }
      ["dir_alias_cache":protected]=>
      array(0) {
      }
      ["files":protected]=>
      NULL
      ["update_search_index"]=>
      bool(true)
      ["use_property_in_search_index"]=>
      bool(true)
      ["update_dir_counter"]=>
      bool(true)
      ["_values":protected]=>
      array(41) {
        ["id"]=>
        string(2) "76"
        ["site_id"]=>
        string(1) "1"
        ["title"]=>
        string(33) "Проектор ViewSonic DVP5-P"
        ["alias"]=>
        string(25) "proektor-viewsonic-dvp5-p"
        ["short_description"]=>
        string(172) "Самые захватывающие 3D-эффекты у вас в гостиной — погрузитесь в мир сверхреалистичного 3D-кино."
        ["description"]=>
        string(6260) "
Проектор — световой прибор, перераспределяющий свет лампы с концентрацией светового потока на поверхности малого размера или в малом объёме. Проекторы являются в основном оптико-механическими или оптическо-цифровыми приборами, позволяющими при помощи источника света проецировать изображения объектов на поверхность, расположенную вне прибора — экран. Появление проекционных аппаратов обусловило возникновение кинематографа, относящегося к проекционному искусству.
Виды проекционных приборов



Диаскопический проекционный аппарат — изображения создаются при помощи лучей света, проходящих через светопроницаемый носитель с изображением. Это самый распространённый вид проекционных аппаратов. К ним относят такие приборы как: кинопроектор, диапроектор, фотоувеличитель, проекционный фонарь, кодоскоп и др.

Эпископический проекционный аппарат — создаёт изображения непрозрачных предметов путём проецирования отраженных лучей света. К ним относятся эпископы, мегаскоп.

Эпидиаскопический проекционный аппарат — формирует на экране комбинированные изображения как прозрачных, так и непрозрачных объектов.

Мультимедийный проектор (также используется термин «Цифровой проектор») — с появлением и развитием цифровых технологий это наименование получили два, вообще говоря, различных класса устройств:

На вход устройства подаётся видеосигнал в реальном времени (аналоговый или цифровой). Устройство проецирует изображение на экран. Возможно при этом наличие звукового канала.

Устройство получает на отдельном или встроенном в устройство носителе или из локальной сети файл или совокупность файлов (слайдшоу) — массив цифровой информации. Декодирует его и проецирует видеоизображение на экран, возможно, воспроизводя при этом и звук. Фактически, является сочетанием в одном устройстве мультимедийного проигрывателя и собственно проектора.

Лазерный проектор — выводит изображение с помощью луча лазера.


Аналоговые проекторы телевизионного сигнала


CRT проектор — аналоговое устройство, в котором изображение создаётся на экране трёх электронно-лучевых трубок, затем проецируется на экран тремя объективами.



Проектор с модуляцией света на масляной пленке — разновидность «светоклапанных» пассивных систем. Аналоговое электронно-лучевое и оптическое устройство, рассчитанное на управление мощным световым потоком для создания изображения на экране большого размера. На основе серийно выпускавшейся системы «Эйдофор» был, в частности, реализован первый большой телевизионный экран (чёрно-белый) Центра управления космическими полётами СССР.


Принцип действия проектора с модуляцией света заключается в том, что поток света падает последовательно на два поглощающих свет растра, между которыми находится масляная плёнка на зеркальной поверхности. Если масляная плёнка не возмущена, свет оказывается задержан обоими растрами и экран совершенно чёрный. Масляная плёнка помещается внутрь электронно-лучевой трубки, которая и формирует на ней распределение заряда в соответствии с поступающим видеосигналом. Распределение заряда, в сочетании с приложенным к зеркалу потенциалом, порождает возмущение поверхности плёнки. Проходя через этот участок плёнки, световой поток проходит мимо второго растра и попадает на экран в соответствующую точку.
"
        ["barcode"]=>
        string(13) "04342-RHIXQJL"
        ["weight"]=>
        string(1) "0"
        ["dateof"]=>
        string(19) "2013-08-07 04:17:39"
        ["num"]=>
        string(1) "4"
        ["unit"]=>
        string(1) "0"
        ["min_order"]=>
        NULL
        ["public"]=>
        string(1) "1"
        ["maindir"]=>
        string(2) "27"
        ["reservation"]=>
        string(7) "default"
        ["brand_id"]=>
        string(1) "0"
        ["format"]=>
        string(0) ""
        ["rating"]=>
        string(3) "4.0"
        ["comments"]=>
        string(1) "1"
        ["last_id"]=>
        string(0) ""
        ["processed"]=>
        NULL
        ["is_new"]=>
        string(1) "0"
        ["group_id"]=>
        NULL
        ["xml_id"]=>
        NULL
        ["recommended"]=>
        string(6) "a:0:{}"
        ["concomitant"]=>
        string(6) "a:0:{}"
        ["offer_caption"]=>
        string(0) ""
        ["meta_title"]=>
        string(0) ""
        ["meta_keywords"]=>
        string(0) ""
        ["meta_description"]=>
        string(0) ""
        ["tax_ids"]=>
        string(8) "category"
        ["recommended_arr"]=>
        array(0) {
        }
        ["concomitant_arr"]=>
        array(0) {
        }
        ["_alias"]=>
        string(25) "proektor-viewsonic-dvp5-p"
        ["xcost"]=>
        array(2) {
          [1]=>
          string(7) "7630.00"
          [2]=>
          string(4) "0.00"
        }
        ["_currency"]=>
        object(Catalog\Model\Orm\Currency)#189 (5) {
          ["_values":protected]=>
          array(9) {
            ["id"]=>
            string(1) "1"
            ["site_id"]=>
            string(1) "1"
            ["title"]=>
            string(3) "RUB"
            ["stitle"]=>
            string(3) "р."
            ["is_base"]=>
            string(1) "1"
            ["ratio"]=>
            string(1) "1"
            ["public"]=>
            string(1) "1"
            ["default"]=>
            string(1) "1"
            ["percent"]=>
            string(1) "0"
          }
          ["_self_class":protected]=>
          string(26) "Catalog\Model\Orm\Currency"
          ["_local_id":protected]=>
          int(70)
          ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
          array(0) {
          }
          ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
          array(0) {
          }
        }
        ["_current_cost_id"]=>
        int(1)
        ["offers"]=>
        array(2) {
          ["use"]=>
          int(1)
          ["items"]=>
          array(1) {
            [0]=>
            object(Catalog\Model\Orm\Offer)#225 (6) {
              ["first_sortn"]=>
              int(0)
              ["_values":protected]=>
              array(15) {
                ["id"]=>
                string(2) "76"
                ["site_id"]=>
                string(1) "1"
                ["product_id"]=>
                string(2) "76"
                ["title"]=>
                NULL
                ["barcode"]=>
                NULL
                ["pricedata"]=>
                string(6) "a:0:{}"
                ["propsdata"]=>
                NULL
                ["num"]=>
                string(1) "4"
                ["photos"]=>
                string(6) "a:0:{}"
                ["sortn"]=>
                string(1) "0"
                ["unit"]=>
                string(1) "0"
                ["processed"]=>
                NULL
                ["xml_id"]=>
                NULL
                ["photos_arr"]=>
                array(0) {
                }
                ["pricedata_arr"]=>
                array(0) {
                }
              }
              ["_self_class":protected]=>
              string(23) "Catalog\Model\Orm\Offer"
              ["_local_id":protected]=>
              int(80)
              ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
              array(0) {
              }
              ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
              array(0) {
              }
            }
          }
        }
        ["multioffers"]=>
        array(1) {
          ["use"]=>
          bool(false)
        }
        ["xdir"]=>
        array(2) {
          [0]=>
          string(1) "1"
          [1]=>
          string(2) "27"
        }
        ["xspec"]=>
        array(1) {
          [0]=>
          string(1) "1"
        }
      }
      ["_self_class":protected]=>
      string(25) "Catalog\Model\Orm\Product"
      ["_local_id":protected]=>
      int(149)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
    ["cartitem"]=>
    object(Shop\Model\Orm\CartItem)#191 (5) {
      ["_values":protected]=>
      array(12) {
        ["site_id"]=>
        string(1) "1"
        ["session_id"]=>
        string(26) "lmjdk7s5qffteh9cudomg69ri5"
        ["uniq"]=>
        string(10) "jh6k9n2vqy"
        ["dateof"]=>
        string(19) "2016-10-28 17:28:11"
        ["user_id"]=>
        string(1) "1"
        ["type"]=>
        string(7) "product"
        ["entity_id"]=>
        string(2) "76"
        ["offer"]=>
        string(1) "0"
        ["multioffers"]=>
        string(6) "a:0:{}"
        ["amount"]=>
        string(1) "1"
        ["title"]=>
        string(33) "Проектор ViewSonic DVP5-P"
        ["extra"]=>
        string(32) "a:1:{s:12:"sub_products";a:0:{}}"
      }
      ["_self_class":protected]=>
      string(23) "Shop\Model\Orm\CartItem"
      ["_local_id":protected]=>
      int(65)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
  }
  ["w8bx5kokfu"]=>
  array(2) {
    ["product"]=>
    object(Catalog\Model\Orm\Product)#199 (20) {
      ["fast_mark_offers_use":protected]=>
      NULL
      ["fast_mark_multioffers_use":protected]=>
      NULL
      ["fast_mark_virtual_multioffers_use":protected]=>
      NULL
      ["keep_update_prod_cat":protected]=>
      bool(true)
      ["keep_spec_dirs":protected]=>
      bool(false)
      ["cache_visible_property":protected]=>
      NULL
      ["user_cost":protected]=>
      NULL
      ["stock":protected]=>
      NULL
      ["full_stock":protected]=>
      NULL
      ["offer_xcost":protected]=>
      array(0) {
      }
      ["dir_alias_cache":protected]=>
      array(0) {
      }
      ["files":protected]=>
      NULL
      ["update_search_index"]=>
      bool(true)
      ["use_property_in_search_index"]=>
      bool(true)
      ["update_dir_counter"]=>
      bool(true)
      ["_values":protected]=>
      array(41) {
        ["id"]=>
        string(2) "23"
        ["site_id"]=>
        string(1) "1"
        ["title"]=>
        string(46) "Ноутбук Lenovo ThinkPad Edge 14 0578RE8"
        ["alias"]=>
        string(39) "noutbuk-lenovo-thinkpad-edge-14-0578re8"
        ["short_description"]=>
        string(319) "Ноутбуки серии специально разрабатывались для игр. Мощнейшая графика, возможность разгона и эффектный внешний вид - отличительные признаки серии "Республики геймеров"."
        ["description"]=>
        string(3774) "
Ноутбук (англ. notebook — блокнот, блокнотный ПК) — портативный персональный компьютер, в корпусе которого объединены типичные компоненты ПК, включая дисплей, клавиатуру и устройство указания (обычно сенсорная панель, или тачпад), карманный компьютер, а также аккумуляторные батареи. Ноутбуки отличаются небольшими размерами и весом, время автономной работы ноутбуков изменяется в пределах от 1 до 15 часов.

История

Идею создания портативной вычислительной машины «размером с блокнот, имеющей плоский монитор и умеющей подключаться к сетям без проводов» выдвинул начальник исследовательской лаборатории фирмы Xerox Алан Кей (Alan Key) в 1968 г.

В 1979 г. по заказу NASA Вильям Могридж (компания Grid Systems) создал первый в мире ноутбук Grid Compass (оперативная память на ЦМД объёмом 340 КБ, процессор Intel 8086 с тактовой частотой 8 МГц, люминесцентный экран). Данный ноутбук использовался в программе Space Shuttle.

Первая общегражданская модель Osborne 1 (масса 11 кг, оперативная память 64 Кб, процессор Zilog Z80A с тактовой частотой 4 МГц, два дисковода 5,25 дюйма, три порта, в том числе для подключения модема, монохромный дисплей 8,75х6,6 см, вмещавший 24 строки по 52 символа; 69 клавиш) была создана изобретателем Адамом Осборном (Adam Osborne) в 1981 году и выпущена на рынок по цене $1795. Из-за маркетинговой ошибки, состоявшей в том, что начало продаж последующей модели Osborne Vixen было объявлено задолго до поступления машин в реализацию (а это ударило по продажам Osborne 1), компания разорилась.

В 1982 году компания Compaq успешно представила IBM PC-совместимый портативный компьютер на базе процессора Intel 8080. С 1983 г. многие производители компьютерной техники уже имели собственную линейку ноутбуков (например Epson HX-20). В 1984 г. фирма Apple выпустила первый ноутбук с LCD. В 1986 г. IBM представила первую «трансформируемую» модель ноутбука на базе процессора Intel (масса 5,4 кг, дисковод 3,5 дюйма) по цене $3500.

В 1990 г. Intel был представлен первый специализированный процессор для мобильных ПК — Intel386 SL, а также была предложена технология снижения напряжения питания, увеличившая срок службы батарей.
"
        ["barcode"]=>
        string(13) "15772-HQU2XJH"
        ["weight"]=>
        string(1) "0"
        ["dateof"]=>
        string(19) "2013-08-05 18:09:15"
        ["num"]=>
        string(1) "4"
        ["unit"]=>
        string(1) "0"
        ["min_order"]=>
        NULL
        ["public"]=>
        string(1) "1"
        ["maindir"]=>
        string(1) "9"
        ["reservation"]=>
        string(7) "default"
        ["brand_id"]=>
        string(1) "7"
        ["format"]=>
        string(0) ""
        ["rating"]=>
        string(3) "0.0"
        ["comments"]=>
        string(1) "0"
        ["last_id"]=>
        string(0) ""
        ["processed"]=>
        NULL
        ["is_new"]=>
        string(1) "0"
        ["group_id"]=>
        NULL
        ["xml_id"]=>
        NULL
        ["recommended"]=>
        string(6) "a:0:{}"
        ["concomitant"]=>
        string(6) "a:0:{}"
        ["offer_caption"]=>
        string(0) ""
        ["meta_title"]=>
        string(0) ""
        ["meta_keywords"]=>
        string(0) ""
        ["meta_description"]=>
        string(0) ""
        ["tax_ids"]=>
        string(8) "category"
        ["recommended_arr"]=>
        array(0) {
        }
        ["concomitant_arr"]=>
        array(0) {
        }
        ["_alias"]=>
        string(39) "noutbuk-lenovo-thinkpad-edge-14-0578re8"
        ["xcost"]=>
        array(2) {
          [1]=>
          string(8) "14600.00"
          [2]=>
          string(4) "0.00"
        }
        ["_currency"]=>
        object(Catalog\Model\Orm\Currency)#189 (5) {
          ["_values":protected]=>
          array(9) {
            ["id"]=>
            string(1) "1"
            ["site_id"]=>
            string(1) "1"
            ["title"]=>
            string(3) "RUB"
            ["stitle"]=>
            string(3) "р."
            ["is_base"]=>
            string(1) "1"
            ["ratio"]=>
            string(1) "1"
            ["public"]=>
            string(1) "1"
            ["default"]=>
            string(1) "1"
            ["percent"]=>
            string(1) "0"
          }
          ["_self_class":protected]=>
          string(26) "Catalog\Model\Orm\Currency"
          ["_local_id":protected]=>
          int(70)
          ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
          array(0) {
          }
          ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
          array(0) {
          }
        }
        ["_current_cost_id"]=>
        int(1)
        ["offers"]=>
        array(2) {
          ["use"]=>
          int(1)
          ["items"]=>
          array(1) {
            [0]=>
            object(Catalog\Model\Orm\Offer)#200 (6) {
              ["first_sortn"]=>
              int(0)
              ["_values":protected]=>
              array(15) {
                ["id"]=>
                string(2) "23"
                ["site_id"]=>
                string(1) "1"
                ["product_id"]=>
                string(2) "23"
                ["title"]=>
                NULL
                ["barcode"]=>
                NULL
                ["pricedata"]=>
                string(6) "a:0:{}"
                ["propsdata"]=>
                NULL
                ["num"]=>
                string(1) "4"
                ["photos"]=>
                string(6) "a:0:{}"
                ["sortn"]=>
                string(1) "0"
                ["unit"]=>
                string(1) "0"
                ["processed"]=>
                NULL
                ["xml_id"]=>
                NULL
                ["photos_arr"]=>
                array(0) {
                }
                ["pricedata_arr"]=>
                array(0) {
                }
              }
              ["_self_class":protected]=>
              string(23) "Catalog\Model\Orm\Offer"
              ["_local_id":protected]=>
              int(79)
              ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
              array(0) {
              }
              ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
              array(0) {
              }
            }
          }
        }
        ["multioffers"]=>
        array(1) {
          ["use"]=>
          bool(false)
        }
        ["xdir"]=>
        array(3) {
          [0]=>
          string(1) "1"
          [1]=>
          string(1) "9"
          [2]=>
          string(2) "53"
        }
        ["xspec"]=>
        array(2) {
          [0]=>
          string(1) "1"
          [1]=>
          string(2) "53"
        }
      }
      ["_self_class":protected]=>
      string(25) "Catalog\Model\Orm\Product"
      ["_local_id":protected]=>
      int(150)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
    ["cartitem"]=>
    object(Shop\Model\Orm\CartItem)#193 (5) {
      ["_values":protected]=>
      array(12) {
        ["site_id"]=>
        string(1) "1"
        ["session_id"]=>
        string(26) "lmjdk7s5qffteh9cudomg69ri5"
        ["uniq"]=>
        string(10) "w8bx5kokfu"
        ["dateof"]=>
        string(19) "2016-11-01 16:45:54"
        ["user_id"]=>
        string(1) "1"
        ["type"]=>
        string(7) "product"
        ["entity_id"]=>
        string(2) "23"
        ["offer"]=>
        string(1) "0"
        ["multioffers"]=>
        string(6) "a:0:{}"
        ["amount"]=>
        string(1) "1"
        ["title"]=>
        string(46) "Ноутбук Lenovo ThinkPad Edge 14 0578RE8"
        ["extra"]=>
        NULL
      }
      ["_self_class":protected]=>
      string(23) "Shop\Model\Orm\CartItem"
      ["_local_id":protected]=>
      int(66)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
  }
}

Повысить оценку Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Судя по всему getProductItems который у Вас в $product_item ещё не знает об удалённом товаре, видимо из-за кэша.
Пробуйте

{assign var=product_items value=$cart->getProductItems()}

Заменить на

{assign var=product_items value=$cart->getProductItems(false)}

28 Отредактировано Илья (01.11.2016 17:46:02)

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Тоже самое

<div class="cart" id="cartItems">
    <div class="top">
        <div class="cartIcon">Корзина</div>
                <a class="clearCart" href="/cart/?Act=cleanCart"><span>очистить корзину</span></a>
            </div>
    <div class="padd">
                <div class="head">
            <div class="price">Цена</div>    
            <div class="amount">Количество</div>
        </div>
        <form method="POST" action="/cart/?Act=update" id="cartForm">
            <input type="submit" class="hidden">
            
            <div class="viewport">
                <table class="cartProducts">                    
                                                                                                                   
 <tr data-id="lnx8a39v6h" data-product-id="" class="cartitem first">
                            <td class="colPreview">
                                <a class="preview" href="<!--error--><br />
<b>Fatal error</b>:  Call to a member function getUrl() on a non-object in <b>Z:\home\test.local\www
\cache\smarty\compile\modules_shop_view_cartpage_tpl.rs.tpl.php</b> on line <b>96</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>

Повысить оценку Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Ну тогда вот так:

{$shop_config=ConfigLoader::byModule('shop')}
{assign var=catalog_config value=ConfigLoader::byModule('catalog')}
{assign var=product_items value=$cart->getProductItems()}
<div class="cart" id="cartItems">
    <div class="top">
        <div class="cartIcon">Корзина</div>
        {if !empty($cart_data.items)}
        <a class="clearCart" href="{$router->getUrl('shop-front-cartpage', ["Act" => "cleanCart"])}"><span>очистить корзину</span></a>
        {/if}
    </div>
    <div class="padd">
        {if !empty($cart_data.items)}
        <div class="head">
            <div class="price">Цена</div>    
            <div class="amount">Количество</div>
        </div>
        <form method="POST" action="{$router->getUrl('shop-front-cartpage', ["Act" => "update"])}" id="cartForm">
            <input type="submit" class="hidden">
            {hook name="shop-cartpage:products" title="{t}Корзина:товары{/t}"}
            <div class="viewport">
                <table class="cartProducts">
                    {foreach from=$cart_data.items key=index item=item name="items"}
                        {assign var=product value=$product_items[$index].product}
                        {if $product}
                        {assign var=cartitem value=$product_items[$index].cartitem}
                        {if !empty($cartitem.multioffers)}
                           {assign var=multioffers value=unserialize($cartitem.multioffers)} 
                        {/if}
                        <tr data-id="{$index}" data-product-id="{$cartitem.entity_id}" class="cartitem{if $smarty.foreach.items.first} first{/if}">
                            <td class="colPreview">
                                <a class="preview" href="{$product->getUrl()}"><img src="{$product->getMainImage(64,64)}" alt="{$product.title}"/></a>
                            </td>
                            <td class="colTitle">
                                <a class="title" href="{$product->getUrl()}">{$product.title}</a><br>
                                {if $product->isMultiOffersUse()}
                                    <div class="multiOffers">
                                        {foreach $product.multioffers.levels as $level}
                                            {if !empty($level.values)}
                                                <div class="title">{if $level.title}{$level.title}{else}{$level.prop_title}{/if}</div>
                                                <select name="products[{$index}][multioffers][{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}">
                                                    {foreach $level.values as $value}
                                                        <option {if $multioffers[$level.prop_id].value == $value.val_str}selected="selected"{/if} value="{$value.val_str}">{$value.val_str}</option>   
                                                    {/foreach}
                                                </select>
                                            {/if}
                                        {/foreach}
                                        {if $product->isOffersUse()}
                                            {foreach from=$product.offers.items key=key item=offer name=offers}
                                                <input id="offer_{$key}" type="hidden" name="hidden_offers" class="hidden_offers" value="{$key}" data-info='{$offer->getPropertiesJson()}' data-num="{$offer.num}"/>
                                                {if $cartitem.offer==$key}
                                                    <input type="hidden" name="products[{$index}][offer]" value="{$key}"/>
                                                {/if}
                                            {/foreach}
                                        {/if}
                                    </div>
                                {elseif $product->isOffersUse()}
                                    <select name="products[{$index}][offer]" class="offer">
                                        {foreach from=$product.offers.items key=key item=offer name=offers}
                                            <option value="{$key}" {if $cartitem.offer==$key}selected{/if}>{$offer.title}</option>
                                        {/foreach}
                                    </select>
                                {/if}
                            </td>
                            <td class="colAmount">      
                                <div class="amoutPicker">                    
                                    <div class="qpicker">
                                        <a class="inc"></a>
                                        <a class="dec"></a>
                                    </div>                    
                                    <input type="text" maxlength="4" class="fieldAmount" value="{$cartitem.amount}" name="products[{$index}][amount]"> 
                                    <span class="unit">
                                        {if $catalog_config.use_offer_unit}
                                            {$product.offers.items[$cartitem.offer]->getUnit()->stitle}
                                        {else}
                                            {$product->getUnit()->stitle}
                                        {/if}
                                    </span>
                                    <div class="error">{$item.amount_error}</div>
                                </div>
                            </td>
                            <td class="colPrice">
                                <div class="floatbox">
                                    <span class="priceBlock">
                                        <span class="priceValue">{$item.cost}</span>
                                    </span>
                                </div>
                                <div class="discount">
                                    {if $item.discount>0}
                                    скидка {$item.discount}
                                    {/if}
                                </div>
                            </td>
                            <td class="colRemove">
                                <a title="Удалить товар из корзины" class="remove" href="{$router->getUrl('shop-front-cartpage', ["Act" => "removeItem", "id" => $index])}"></a>
                            </td>
                        </tr>
                        {assign var=concomitant value=$product->getConcomitant()}
                        
                        {foreach from=$item.sub_products key=id item=sub_product_data}
                            {assign var=sub_product value=$concomitant[$id]}
                            <tr>

                                <td colspan="2" class="colTitle">
                                    <label>
                                        <input 
                                            class="fieldConcomitant" 
                                            type="checkbox" 
                                            name="products[{$index}][concomitant][]" 
                                            value="{$sub_product->id}"
                                            {if $sub_product_data.checked}
                                                checked="checked"
                                            {/if}
                                            >
                                        {$sub_product->title}
                                    </label>
                                </td>
                                <td class="colAmount">
                                    {if $shop_config.allow_concomitant_count_edit}
                                        <div class="amoutPicker">                    
                                            <div class="qpicker">
                                                <a class="inc"></a>
                                                <a class="dec"></a>
                                            </div>                            
                                            <input type="text" maxlength="4" class="fieldAmount concomitant" data-id="{$sub_product->id}" value="{$sub_product_data.amount}" name="products[{$index}][concomitant_amount][{$sub_product->id}]"> 
                                            <span class="unit">{$product->getUnit()->stitle}</span>
                                        </div>
                                    {else}
                                        {$sub_product_data.amount} {$sub_product->getUnit()->stitle}
                                    {/if}
                                    <div class="error">{$sub_product_data.amount_error}</div>
                                </td>
                                <td class="colPrice">
                                    <span class="priceBlock">
                                        <span class="priceValue">{$sub_product_data.cost}</span>
                                    </span>
                                    <div class="discount">
                                        {if $sub_product_data.discount>0}
                                        скидка {$sub_product_data.discount}
                                        {/if}
                                    </div>
                                </td>
                                <td></td>
                            </tr>
                        {/foreach}
                        {/if}
                    {/foreach}
                </table>
            </div>
            {/hook}
            {hook name="shop-cartpage:summary" title="{t}Корзина:итог{/t}"}
                <div class="cartFooter">
                    <div class="linesContainer">
                        {foreach from=$cart->getCouponItems() key=id item=item}
                            <div class="line">
                                <a href="{$router->getUrl('shop-front-cartpage', ["Act" => "removeItem", "id" => $id])}" class="remove" title="{t}удалить скидочный купон{/t}"></a>
                                <div class="text">{t}Купон на скидку{/t} {$item.coupon.code}</div>
                                <div class="digits"></div>
                            </div>
                        {/foreach}
                        {if $cart_data.total_discount>0}
                            <div class="line">
                                <div class="text">Скидка на заказ</div>
                                <div class="digits">{$cart_data.total_discount}</div>
                            </div>                        
                        {/if}
                    </div>
                    <div class="discountText">
                        <span class="info">Купон на скидку (если есть): </span><input type="text" class="couponCode{if $cart->getUserError('coupon')!==false} hasError{/if}" size="12" name="coupon" value="{$coupon_code}">&nbsp;
                        <a class="applyCoupon">применить</a>
                    </div>
                    <div class="total"><span class="text">Итого:</span> <span class="total-value">{$cart_data.total}</span></div>
                    <div class="loader"></div>                                
                </div>
            {/hook}
            {hook name="shop-cartpage:bottom" title="{t}Корзина:подвал{/t}"}
                <div class="bottom">
                    <noscript><input type="submit" class="onemoreEmpty recalc" value="{t}Пересчитать{/t}"></noscript>
                    <a href="{$router->getUrl('shop-front-checkout')}" class="submit{if $cart_data.has_error} disabled{/if}">{t}Оформить заказ{/t}</a>
                    
                    <a href="JavaScript:;" class="continue">Продолжить покупки</a>
                    
                    {if $THEME_SETTINGS.enable_one_click_cart}
                    <a href="JavaScript:;" class="toggleOneClickCart"><span class="tabletHidden">Заказать по телефону</span></a>
                    {/if}
                    
                    <div class="error" {if !empty($cart_data.errors)}style="display: block;"{/if}>
                        {foreach from=$cart_data.errors item=error}
                            {$error}<br>
                        {/foreach}
                    </div>
                </div>
            {/hook}
        </form>
        {* Покупка в один клик в корзине *}
        {if $THEME_SETTINGS.enable_one_click_cart}
            {moduleinsert name="\Shop\Controller\Block\OneClickCart"}
        {/if}
        {else}
            <div class="empty">В корзине нет товаров</div>
        {/if}
    </div>
</div>

30

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Закусило Александр Спасибо, так работает. только осталось одно маленькое но
Можно ли как то сделать, что бы кеш сбрасывался и в cart.tpl тоже. А то товар из корзины удаляется, а в блоке он еще показывается

<a class="basket showCart" id="cart" href="{$router->getUrl('shop-front-cartpage')}">
    <div class="cart"><span class="lineHolder"></span><span class="title">МОЯ КОРЗИНА</span></div>
    <p class="products">товаров: <span class="value">{$cart_info.items_count}</span></p>
    <p class="cost">сумма: <span class="value">{$cart_info.total}</span></p>
</a>

http://storage8.static.itmages.ru/i/16/1102/s_1478076389_7571572_44883d40ea.png

Повысить оценку Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Эти блоки отделены от друг друга совершенно. Вы можете при открытии корзины вызвать js событие для обновления корзины отправив запрос AJAXом на /cart/.
В ответ придет json с секцией cart.
Тогда можно в js вызвать

$.cart('updateCartBlock', секция с cart);

32

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Появился следующий косяк, подскажите как решить?
1. Пользователь делает заказ
2. Заказ подтверждается
3. Позицию которая есть в совершенном заказе, выключаем
4. Потом мы хотим например, поменять цену доставки в заказе или изменить размер товарной позиции, но это не срабатывает, и выдается ошибка, потому что одна из товарных позиций выключена.

Повысить оценку Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Вам в поддержку.

34

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Скажите а можно ли во всплывающем окне корзины, вывести текст с ошибкой
вместо вот этого?

$cart->removeItem($key);    

Повысить оценку Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Вы хотите свою ошибку вывести? Или значение переменной? Или какие ошибки?

36

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Закусило Александр пишет:

Вы хотите свою ошибку вывести? Или значение переменной? Или какие ошибки?

Ну например вывести текст "Нельзя оформить заказ, такого то товара нет в наличии"

Повысить оценку Понизить оценку

37

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Разобрался. Сделал следующим образом в cartpage.tpl

После:

<a class="title" href="{$product->getUrl()}">{$product.title}</a><br>

Вставить:

{if $product.public==0}<span style="color:red;">Товара нет в наличии</span>{/if}<br>

Это заменить:

                    <noscript><input type="submit" class="onemoreEmpty recalc" value="{t}Пересчитать{/t}"></noscript>
                    <a href="{$router->getUrl('shop-front-checkout')}" class="submit{if $cart_data.has_error} disabled{/if}">{t}Оформить заказ{/t}</a>
                    
                    <a href="JavaScript:;" class="continue">Продолжить покупки</a>

На это:

                {$s = 1}
                {foreach $product_items as $publics}
                    {if $publics.product.public  eq 0}
                    {$s = 0}
                    {break}
                    {/if}
                {/foreach}
                <!-- {var_dump($s)} -->
                {if $s eq 0}
                    <a href="{$router->getUrl('shop-front-checkout')}" class="submit disabled">{t}Оформить заказ{/t}</a>
                {else}
                    <a href="{$router->getUrl('shop-front-checkout')}" class="submit{if $cart_data.has_error} disabled{/if}">{t}Оформить заказ{/t}</a>                 
                {/if}           
                    <noscript><input type="submit" class="onemoreEmpty recalc" value="{t}Пересчитать{/t}"></noscript>
                    <!-- <a href="{$router->getUrl('shop-front-checkout')}" class="submit{if $cart_data.has_error} disabled{/if}">{t}Оформить заказ{/t}</a> -->
                    <a href="JavaScript:;" class="continue">Продолжить покупки</a>

http://s020.radikal.ru/i716/1702/10/13c4ee5b2f75.png

Повысить оценку +1 Понизить оценку

Re: Убрать товар из корзины и запрет оформления если он выключен [Решено]

Супер! Вы молодец!