[Помогите] Не работает кнопка "купить" в мобильной версии

Тема в разделе "OpenCart", создана пользователем opalko, 30 мар 2017.

  1. opalko

    opalko

    Регистрация:
    23 дек 2014
    Сообщения:
    204
    Симпатии:
    14
    Из-за чего не работает кнопка я выяснил - если включен таймер акций, в обычной версии всё работает, в мобильной - не работает кнопка купить. Например http://vazon.pp.ua/lechuza-classico-ls-21-belyy.html
    Если отключить показ таймера, кнопки работают. Например http://vazon.pp.ua/aplikator-kompo-dlja-zeljonih-rastenij-compo.html
    Значит проблема в таймере, и скорее всего в файле Vqmod. Никаких ошибок нет, и при нажатии ничего не происходит, помогите выяснить в чём дело...
    PHP:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>

    <id>Special_price_end_date</id>
    <version>2.3</version>
    <vqmver required="true">2.4.0</vqmver>
    <author>kagan</author>


    <file name="catalog/view/theme/*/template/common/header.tpl">
           <operation error="skip">
               <search position="before" index="false"><![CDATA[</head>]]></search>
               <add>
                   <![CDATA[
                       <link href="catalog/view/theme/univer/stylesheet/timer.css" rel="stylesheet" type="text/css" />
                          <script type="text/javascript" src="catalog/view/javascript/timer/jquery.countdown.js"></script>
                   ]]>
                   </add>
           </operation>
    </file>


    <file name="catalog/controller/product/product.php">
       <operation error="skip">
           <search position="after" index="false"><![CDATA[if ((float)$product_info['special']) {]]></search>
           <add><![CDATA[
                $special_info['date_start'] = $product_info['date_start'];
                $special_info['date_end'] = $product_info['date_end'];

                if ($special_info) {
                    $this->data['special_date_start'] = $special_info['date_start'];
                    $this->data['special_date_end'] = $special_info['date_end'];
                } else {
                    $this->date['special_date_start'] = false;
                    $this->date['special_date_end'] = false;
                }       

            if ($product_info['timer'] == 1){
              $this->data['timer'] = $product_info['timer'];
            } else {
              $this->data['timer'] = false;
            }
           ]]></add>
       </operation>
    </file>

    <file name="catalog/model/catalog/product.php">
       <operation error="skip">
           <search position="replace" index="false"><![CDATA[pd.name AS name, p.image, m.name AS manufacturer,]]></search>
           <add><![CDATA[ pd.name AS name, p.image, m.name AS manufacturer,    (SELECT date_start FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND (ps.date_start = '0000-00-00' OR ps.date_start < '" . $this->NOW . "') ORDER BY ps.date_start ASC LIMIT 1) AS date_start, (SELECT date_end FROM " . DB_PREFIX . "product_special ps2 WHERE ps2.product_id = p.product_id AND ps2.customer_group_id = '" . (int)$customer_group_id . "' AND (ps2.date_end = '0000-00-00' OR ps2.date_end > '" . $this->NOW . "') ORDER BY ps2.date_end ASC LIMIT 1) AS date_end,  (SELECT timer FROM " . DB_PREFIX . "product_special ps3 WHERE ps3.product_id = p.product_id AND ps3.customer_group_id = '" . (int)$customer_group_id . "' AND (ps3.date_end = '0000-00-00' OR ps3.date_end > '" . $this->NOW . "') ORDER BY ps3.date_end ASC LIMIT 1) AS timer,
           ]]></add>
       </operation>
       <operation error="skip">
           <search position="after" index="false"><![CDATA[$query->row['date_modified'],]]></search>
           <add><![CDATA[
                    'date_start'       => $query->row['date_start'],
                  'date_end'       => $query->row['date_end'],
              'timer'          => $query->row['timer'],
           ]]></add>
       </operation>
    </file>

    <file name="catalog/view/theme/*/template/product/product.tpl">
       <operation error="skip">
           <search position="before" index="false"><![CDATA[<div class="description">]]></search>
           <add><![CDATA[
    <?php
    if ($special AND $timer != false) {
        if (
    $special_date_end){
            
    $newdate explode'-'$special_date_end ); 
            if(
    $newdate[0] == 0000){$newdate[0]=date("Y");}
            if(
    $newdate[1] == 00){$newdate[1]=date("m");}
            if(
    $newdate[2] == 00){$newdate[2]=date("d");}
        }   
        
        
    //Чтобы не было сбоя даты
        
    if($newdate[2]!=date("d")){
            
    $newdate[2]=$newdate[2]-1;
        }

    echo 
    "
    <div class=\"date-timer\">
      <span class=\"h1_timer\">Лучшее ценовое предложение!</span><br>
      <span class=\"h1_timer\">Суперцена!</span><br>

      <div class=\"timer-price\">

        <div style='float:left;'>
          <div class=\"date-end\">До конца акции осталось:</div>
          <script language=\"JavaScript\" SRC=\"catalog/view/javascript/timer/php/countdown.php?countto=
    {$newdate[0]}-{$newdate[1]}-{$newdate[2]} 23:59:59&do=t&data=Акция закончилась\"></script>
        </div>


      </div>
        <div class=\"box-prices\">
          <div class=\"price-old-1\">
    $price</div><div class=\"price-old-zacher\"></div><br> <div class=\"price-new-1\"> Цена: <span style='color:#FF3636; text-decoration:underline;'>$special</span></div>
        </div>
      <div class=\"cart\" style=\"text-align:center;border-top: 1px solid #E7E7E7;padding-top:10px;\">
          <div> 
    $text_qty
            <input type=\"text\" name=\"quantity\" size=\"2\" value=\" 
    $minimum \" />
            <input type=\"hidden\" name=\"product_id\" size=\"2\" value=\" 
    $product_id \" />
            &nbsp;
            <input type=\"button\" value=\" 
    $button_cart \" id=\"button-cart\" class=\"button\" />
            <span>&nbsp;&nbsp; 
    $text_or &nbsp;&nbsp;</span>
            <span class=\"links\"><a onclick=\"addToWishList(' 
    $product_id ');\"> $button_wishlist</a><br />
            <a onclick=\"addToCompare('
    $product_id');\">$button_compare</a></span>
          </div>
          <div class=\"minimum\">
    $text_minimum </div>
       </div>
    </div>"
    ;
    ?>
       ]]></add>
       </operation>
       <operation error="skip">
           <search position="replace" index="false"><![CDATA[<div class="price">]]></search>
           <add><![CDATA[
          <?php if (!$special OR $timer == false) { echo "<div class=\"price\">";} else {?><div class="special-display price"> <?php }?>
        ]]></add>
       </operation>
       <operation error="skip">
           <search position="replace" index="false"><![CDATA[<div class="cart">]]></search>
           <add><![CDATA[
          <?php if (!$special OR $timer == false) { echo "<div class=\"cart\">";} else {?><div class="special-display cart"> <?php }?>
         ]]></add>
       </operation>
    </file>


    <file name="catalog/controller/product/category.php">
       <operation error="skip">
           <search position="after" index="false"><![CDATA[sprintf($this->language->get('text_reviews'), (int)$result['reviews']),]]></search>
           <add><![CDATA[
                'date_start'  => $result['date_start'],
                'date_end'    => $result['date_end'],       
          'timer'       => $result['timer'],   
           ]]></add>
       </operation>
    </file>

    <file name="catalog/view/theme/*/template/product/category.tpl">
       <operation error="skip">
           <search position="after" index="false"><![CDATA[<span class="price-new"><?php echo $product['special']; ?></span>]]></search>
           <add><![CDATA[
    <?php
    if($product['timer'] == true) {
    ?>
      <div id="CountdownProduct<?=$product['product_id'];?>"  class="mobile"></div>
      <br>
    <?php
      
    if ($product['date_end']){
     
          
    $newdate explode'-'$product['date_end']); 
          
          if(
    $newdate[0] == 0000){$newdate[0]=date("Y");}
          if(
    $newdate[1] == 00){$newdate[1]=date("m");}
          if(
    $newdate[2] == 00){$newdate[2]=date("d")+1;}
    ?>
        <script type="text/javascript">
            $(function () {   
                $('#CountdownProduct<?=$product['product_id'];?>').countdown(
                    {until: new Date(<?=$newdate[0];?><?=$newdate[1];?>-1, <?=$newdate[2];?>), timezone: <?=date("O");?>, expiryText: '<div class="over">Акция окончена!</div>', compact: false});
            });
        </script>
    <?php
      
    }
    }
    ?>
     
           ]]></add>
       </operation>
    </file>


    <file name="catalog/controller/product/special.php">
       <operation error="skip">
           <search position="after" index="false"><![CDATA[sprintf($this->language->get('text_reviews'), (int)$result['reviews']),]]></search>
           <add><![CDATA[
                'date_start'  => $result['date_start'],
                'date_end'    => $result['date_end'],       
           ]]></add>
       </operation>
    </file>

    <file name="catalog/view/theme/*/template/product/special.tpl">
       <operation error="skip">
           <search position="after" index="false"><![CDATA[<span class="price-new"><?php echo $product['special']; ?></span>]]></search>
           <add><![CDATA[
    <div id="CountdownProduct<?=$product['product_id'];?>" class="mobile"></div>
    <br>
    <?php
    if ($product['date_end']){
        
        
    $newdate explode'-'$product['date_end']); 
        
        if(
    $newdate[0] == 0000){$newdate[0]=date("Y");}
        if(
    $newdate[1] == 00){$newdate[1]=date("m");}
        if(
    $newdate[2] == 00){$newdate[2]=date("d")+1;}
    ?>
    <script type="text/javascript">
        $(function () {   
            $('#CountdownProduct<?=$product['product_id'];?>').countdown(
                {until: new Date(<?=$newdate[0];?><?=$newdate[1];?>-1, <?=$newdate[2];?>), timezone: <?=date("O");?>, expiryText: '<div class="over">Акция окончена!</div>', compact: false});
        });
    </script>
    <?php ?>
           ]]></add>
       </operation>
    </file>


    <file name="aopal_admin/model/catalog/product.php">
       <operation error="skip">
           <search position="replace" index="false"><![CDATA[date_start = '" . $this->db->escape($product_special['date_start']) . "',]]></search>
           <add><![CDATA[date_start = '" . $this->db->escape($product_special['date_start']) . "',
             timer = '" . $this->db->escape($product_special['timer']) . "',
           ]]></add>
       </operation>
    </file>


    <file name="aopal_admin/view/template/catalog/product_form.tpl">
           <operation error="skip">
               <search position="before" index="false"><![CDATA[<td class="left"><a onclick="$(\'#special-row' + special_row]]></search>
               <add>
                <![CDATA[ html += '<td class="center"><select name="product_special[' + special_row + '][timer]"> <option value=1 selected>Вкл.</option> <option value=0 >Откл.</option></select></td>'; ]]>
                </add>
           </operation>
           <operation error="skip">
               <search position="replace" index="false"><![CDATA[<td colspan="5">]]></search>
               <add>
                <![CDATA[<td colspan="6">]]>
                </add>
           </operation>
           <operation error="skip">
               <search position="after" index="false"><![CDATA[value="<?php echo $product_special['date_end']; ?>" class="date" /></td>]]></search>
               <add>
                <![CDATA[
                    <!-- Timer  -->
                    <td class="center">
                      <select name="product_special[<?php echo $special_row?>][timer]">
                          <option value=1 <?php if($product_special['timer'] == 1){ echo "selected"; } ?>>Вкл.</option>
                          <option value=0 <?php if($product_special['timer'] == 0){ echo "selected"; } ?>>Откл.</option>
                      </select>
                    </td>
                    <!-- Timer -->
                ]]>
                </add>
           </operation>   
           <operation error="skip">
               <search position="after" index="false"><![CDATA[<td class="left"><?php echo $entry_date_end?></td><!-- Timer -->]]></search>
               <add>
                <![CDATA[
                    <!-- Timer  -->
                    <td class="center">Таймер</td>
                    <!-- Timer -->
                ]]>
                </add>
           </operation>                     
    </file>

    </modification>
     
  2. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    У тебя класс .date-timer скрыт на мобилках, поставь блок и подверстай)
    Код:
    @media (max-width: 600px)
    timer.css:195
    .date-timer {
        display: none;//поставь block
    }
     
    opalko нравится это.
  3. opalko

    opalko

    Регистрация:
    23 дек 2014
    Сообщения:
    204
    Симпатии:
    14
    спасибо, но не прокатило. Сделал всё как написано выше, таймер появился, а вместе с ним вторая рабочая кнопка "купить", продвижение есть, но пока изменения убрал, т.к. проект рабочий, может есть идеи как править код для нормального отображения?
     
    Последнее редактирование: 30 мар 2017
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Весь секрет в том, что у вас таймер добавляет на страницу вторую кнопку с id button-cart. Пока на странице есть две кнопки с одинаковым id, работать будет только одна (и видна ли вторая - значения не имеет).

    Можете, например. сделать, чтоб таймер был виден всегда, а обычная кнопка Купить вообще не выводилась на страницу, если есть таймер (не выводилась ещё на стороне php).
     
    opalko нравится это.
  5. opalko

    opalko

    Регистрация:
    23 дек 2014
    Сообщения:
    204
    Симпатии:
    14
    Я думал будет проще, а тут видимо нужно поправить код, в чём я не соображаю.