tolik777

[Выполнено] Пофиксить баг календаря. Подружить модуль и шаблон

Рекомендуемые сообщения

tolik777    3

Краткое описание задачи: Необходимо пофиксить баг календаря связанный с позиционированием. Насколько я разобрался, работа в основном связана с JavaScript, плюс немного CSS.

 

Исходные данные:

ocStore 1.5.5.1.2

Модуль OpenCart Reservations -booking system for products vqmod

Шаблон Pizza Chef - Bootstrap Template 1.0.2 vqmod

Больше никаких изменений не вносилось.

 

Более подробное описание задачи:

Итак на основе OpenCart и вышеупомянутого модуля создается сервис аренды. Смысл данного модуля в том, что он подменяет поле даты (задается опция) у товара и добавляет второй поле, т.к. срок аренды с такой-то даты по такую то.

Вот как это выглядит на дефолтном шаблоне:

post-669947-0-84614400-1402929641_thumb.png

При этом, модуль заменяет стандартный модуль календаря на Zebra_Datepicker

 

Проблема в том, что после установки шаблона Pizza, он также заменяет модуль календаря на какой-то свой. Я пытался оставить в шаблоне старый модуль календаря, для этого я исключил XML-файл для vqmod, который вырезает модуль календаря, а также в шаблон product.tpl добавил строчки даты (когда отображаются опции даты) из дефолтного шаблона.

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

post-669947-0-37978200-1402930228_thumb.png

post-669947-0-60137700-1402930238_thumb.png

 

Пытался разобраться сам. В коде календаря zebra_datepicker.src.js нашел функции для расчета позиции отображения иконки и самого календаря:

 var

                    // get the date picker width and height
                    datepicker_width = datepicker.outerWidth(),
                    datepicker_height = datepicker.outerHeight(),

                    // compute the date picker's default left and top
                    // this will be computed relative to the icon's top-right corner (if the calendar icon exists), or
                    // relative to the element's top-right corner otherwise, to which the offsets given at initialization
                    // are added/subtracted
                    left = (undefined !== icon ? icon.offset().left + icon.outerWidth(true) : $element.offset().left + $element.outerWidth(true)) + plugin.settings.offset[0],
                    top = (undefined !== icon ? icon.offset().top : $element.offset().top) - datepicker_height + plugin.settings.offset[1],

                    // get browser window's width and height
                    window_width = $(window).width(),
                    window_height = $(window).height(),

                    // get browser window's horizontal and vertical scroll offsets
                    window_scroll_top = $(window).scrollTop(),
                    window_scroll_left = $(window).scrollLeft();

                // if date picker is outside the viewport, adjust its position so that it is visible
                if (left + datepicker_width > window_scroll_left + window_width) left = window_scroll_left + window_width - datepicker_width;
                if (left < window_scroll_left) left = window_scroll_left;
                if (top + datepicker_height > window_scroll_top + window_height) top = window_scroll_top + window_height - datepicker_height;
                if (top < window_scroll_top) top = window_scroll_top;

                // make the date picker visible
                datepicker.css({
                    'left':     left,
                    'top':      top
                });

top как раз задает позицию по вертикали. Если поставить там фиксированное значение, то все работает как надо, но стоит изменить размер окна браузера, так по вертикали сразу же происходит смещение. В общем должна быть привязка к элементу формы по которой щелкнули. Но здесь у меня ума не хватает разобраться.

 

В общем ищу исполнителя данной интересной задачки.

 

Сроки ваши.

 

По стоимости готов выслушать.

 

Оплата WebMoney, RBKMoney, Яндекс.Деньги, Сбербанк, на карту, на р/с и т.д. как вам удобнее.

 

Если нужен отзыв на weblancer или fl, то можно оформить через биржу фриланса с оставлением отзыва (у меня там эккаунты по несколько лет с постоянными заказами и отзывами).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
tolik777    3

Работа сделана. Топик закрыт.

Спасибо пользователю m899 за качественно выполненную работу!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От skyzy
      Приветствую знатоков!
      Решил слегка доработать функцию add в файле common.js (отвечает за добавление товара вкорзину).
      Хотелось, чтобы выскакивало модальное окно с тем же текстом, что и в стандартном сообщении. 
      Проблема в следующем. 
      В хроме появляется ошибка: Cannot read property 'open' of undefined
      При этом в яндекс браузере всё работает на ура.
      Вот код функции:
      ...'add': function(product_id,buttonId, quantity) { $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1), dataType: 'json', beforeSend: function() { $('#cart > button').button('loading'); }, complete: function() { $('#cart > button').button('reset'); }, success: function(json) { $('.alert, .text-danger').remove(); if (json['redirect']) { location = json['redirect']; } if (json['success']) { $('#content').parent().before('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>'); // Need to set timeout otherwise it wont update the total setTimeout(function () { $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>'); }, 100); document.getElementById('cartCount').innerHTML = json['total']; //Меняем класс блока с корзиной var articleCart = document.getElementById(buttonId); articleCart.className = ""; articleCart.className = "activeCart"; $('html, body').animate({ scrollTop: 0 }, 'slow'); $('#cart > ul').load('index.php?route=common/cart/info ul li'); //Открываем модальное окно. ================>>> $.magnificPopup.open <<<========================== Здесь выскакивает ошибка ({ items: { src: '<div class="cartAddPopup">'+json['success']+'</div>', type: 'inline' } }); } }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); }... Сайт: joy-joy.ru прямо на главной странице можно посмотреть
      ocStore 2.1
      Надеюсь на помощь знатоков.
    • От Froxy
      Eсть возможность вывести базовую цену товара, то есть без скидок и выбираемых опций, чтоб было 2 цены допустим 1 с опциями и 1 начальная?
      Сделал примерно таки  образом:
      Вывел начальное повторную цену товара: <?php echo $price_value; ?>
      Но возникла проблема, цена показывается с 4 нулями после  точки "100.0000"
      Пытаюсь убрать их с помощью js, но не  получается, вот код:
      <div id="number2"> <?php echo $price_value; ?> </div> <script type="text/javascript"> var number = +document.getElementById ("number2"); number = number.toFixed(2); alert(number); </script> В чем мб проблема?
    • От Igor112
      Мой сайт http://bizarreshop.by/ . Добавил скрипт (menu.js) который прикрепляет меню сверху при скроллинге, однако работает это только на главной странице. На всех остальных не работает. 
      Проверял подключены ли нужные скрипты на страницах - всё есть.
      Помогите пожалуйста разобраться с проблемой.
    • От qwerty
      Здравствуйте. Помогите пожалуйста.
      Сайт http://test22.sportsontheweb.net/
      В мобильной версии менюшка открывается по клику на иконку (три полосочки).
      Как сделать что бы по умолчанию она была включена и показывалась?
      Спасибо!
    • От redinsane
      Вообщем есть проблема с функцией addModule();
      Я начинающий разработчик PHP и яваскрипта практически не знаю. Мне необходимо реализовать модуль по типу баннера и рекомендуемых товаров. Вот код функции addModule мной немного модифицированный. Подскажите как реализовать функцию полноценно чтобы добавлялись все необходимые поля.

       
      <script type="text/javascript"><!-- var module_row = <?php echo $module_row; ?>; function addModule() {     html  = '<tbody id="module-row' + module_row + '">';   html += '  <tr>';   html += '   <td class="left"><input type="text" id="stark<?php echo $module_row; ?>"/><input type="hidden" name="stark_module[<?php echo $module_row; ?>][stark_ids][]" value="<?php echo $id; ?>" /><div id="featured-stark<?php echo $module_row; ?>" class="scrollbox">';      html += '    <td class="left"><input type="text" name="stark_module[' + module_row + '][width]" value="" size="3" /> <input type="text" name="stark_module[' + module_row + '][height]" value="" size="3" /></td>';   html += '    <td class="left"><select name="stark_module[' + module_row + '][layout_id]">';   <?php foreach ($layouts as $layout) { ?>   html += '      <option value="<?php echo $layout['layout_id']; ?>"><?php echo addslashes($layout['name']); ?></option>';   <?php } ?>   html += '    </select></td>';   html += '    <td class="left"><select name="stark_module[' + module_row + '][position]">';   html += '      <option value="content_top"><?php echo $text_content_top; ?></option>';   html += '      <option value="content_bottom"><?php echo $text_content_bottom; ?></option>';   html += '      <option value="column_left"><?php echo $text_column_left; ?></option>';   html += '      <option value="column_right"><?php echo $text_column_right; ?></option>';   html += '    </select></td>';   html += '    <td class="left"><select name="stark_module[' + module_row + '][status]">';     html += '      <option value="1" selected="selected"><?php echo $text_enabled; ?></option>';     html += '      <option value="0"><?php echo $text_disabled; ?></option>';     html += '    </select></td>';   html += '    <td class="right"><input type="text" name="stark_module[' + module_row + '][sort_order]" value="" size="3" /></td>';   html += '    <td class="left"><a onclick="$(\'#module-row' + module_row + '\').remove();" class="button"><?php echo $button_remove; ?></a></td>';   html += '  </tr>';   html += '</tbody>';      $('#module tfoot').before(html);      module_row++; } //--></script> 
      На картинке примерно показано как работает эта функция. При нажатии "добавить модуль" появляется поле №2 без автокомплита. Как переписать функцию чтобы автокомплит заработал и сохраняло значения при выборе товара?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу