Как использовать DatePopUp (выпадающий календарь) в input прописаном вручную (html) в node.tpl.php

Главные вкладки

Аватар пользователя Sadchenko Sadchenko 16 февраля 2022 в 15:21

Ребята третий день не могу решить этот вопрос!
Подключен модуль DatePopUp
В форме создания ноды работает исправно безотказно.
Но появилась необходимость прикрутить этот календарь к обычному полю input прописанному просто HTML'ем в шаблоне node.tpl.php
Я уже и вручную скрипты прописывал и полностью идентично форму создания ноды копировал и как только не делал. ХЕЛП! Я больше не знаю вариантов что еще можно попробовать. Как мне это реализовать?

Комментарии

Аватар пользователя ivnish ivnish 16 февраля 2022 в 15:24

1) Проверить что js-библиотека подключена на нужных страницах, где DatePopUp нужно навесить на input (проверить можно в инспекторе браузера)
2) Если не подключена, то подключаем любым удобным друпалвейным способом (гугл drupal 7 attach js)
3) В js-файле темы оформления (если такой имеется) подключаем этот DatePopUp к инпуту как предлагает документация этого DatePopUp

Аватар пользователя Sadchenko Sadchenko 16 февраля 2022 в 15:35

ivnish wrote:

Спасибо!
Можете пожалуйста по подробнее какие именно файлы JS надо подключить? Потому что я вручную их прописывал в html.tpl.php
Вот этот список

<style type="text/css" media="all">
@import url("/sites/all/libraries/wvega-timepicker/jquery.timepicker.css?r7e7gx");
@import url("/sites/all/modules/date/date_popup/themes/datepicker.1.7.css?r7e7gx");
@import url("/sites/all/modules/date/date_api/date.css?r7e7gx");
@import url("/misc/ui/jquery.ui.datepicker.css?r7e7gx");
@import url("/sites/all/modules/date/date_popup/themes/jquery.timeentry.css?r7e7gx");
</style>
<script type="text/javascript" src="/misc/ui/jquery.ui.datepicker.min.js?v=1.8.7"></script>
<script type="text/javascript" src="/misc/ui/jquery.ui.datepicker-1.13.0-backport.js?v=1.8.7"></script>
<script type="text/javascript" src="/modules/locale/locale.datepicker.js?v=1.8.7"></script>
<script type="text/javascript" src="/sites/all/modules/date/date_popup/jquery.timeentry.pack.js?v=1.4.7"></script>
<script type="text/javascript" src="/sites/all/libraries/wvega-timepicker/jquery.timepicker.js?r7e7gx"></script>
<script type="text/javascript" src="/sites/all/modules/date/date_popup/date_popup.js?r7e7gx"></script>

И как именно правильно подключить через drupal 7 attach js что где прописать надо?

И как инициализировать input правильно? может я его неправильно инициализировал...

Аватар пользователя ivnish ivnish 16 февраля 2022 в 15:37

Sadchenko wrote: какие именно файлы JS надо подключить?

Те которые подключает модуль, который вы используете. Это можно посмотреть в коде самого модуля, например

Sadchenko wrote: И как именно правильно подключить через drupal 7 attach js что где прописать надо?

Выбирайте любой удобный способ

Sadchenko wrote: И как инициализировать input правильно?

Посмотрите как это делает модуль, про который вы говорите в тексте поста

Аватар пользователя Sadchenko Sadchenko 16 февраля 2022 в 15:45

ivnish wrote: ivnish

У меня заработало только когда полностью с сайта источника взял пример и адаптировал скрипт вот так

  <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
  <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script>
    <script>
  $( function() {
    $( "#datepicker" ).datepicker();
  } );
  </script>
<p>Date: <input type="text" id="datepicker"></p>

Но это ведь не правильный подход. Эти скрипты уже есть по идее в каталоге сайта просто нужно их как то конкретно их подключить.

Аватар пользователя long.skinny.boy long.skinny.boy 16 февраля 2022 в 15:48

Стараюсь не пользоваться модулями для всяких frontend плюшек, а просто использую javascript в темплэйте

Для себя нашёл идеальный datepicker: https://www.daterangepicker.com/

Т.е. достал из архива на сайте - в свой темплэйт файлы daterangepicker.js и daterangepicker.css
а также moment.min.js от туда же.
И прописал их в mytemplate.info

stylesheets[all][] = css/daterangepicker.css

scripts[] = 'js/daterangepicker.js'
scripts[] = 'js/moment.min.js'

scripts[] = 'js/mytemplate.js'

После чего в mytemplate.js инициализирую библиотеку на нужном input поле

(function ($) {
  Drupal.behaviors.mytemplate = {
    attach: function (context, settings) {

      if ($('.field-type-datetime').length > 0) {
        moment.locale('ru');
        $('.field-type-datetime input.date-clear').daterangepicker({
          singleDatePicker: true,
          timePicker: true,
          timePicker24Hour: true,
          timePickerIncrement: 10,
          parentEl: '.main-wrapper',
          autoApply: true,
          autoUpdateInput: false,
          locale: {
            applyLabel: 'Применить',
            cancelLabel: 'Отмена',
            toLabel: 'До',
            daysOfWeek: ['Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс', 'Пн'],
            monthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
            firstDay: 1
          }
        },
        function(start, end, label) {
          $(".field-type-datetime input.date-clear").val(start.format('DD.MM.YYYY - HH:mm'));
        }

      );
    }

    }
  };
}(jQuery));

Аватар пользователя Sadchenko Sadchenko 16 февраля 2022 в 16:12

Не работает у меня ваш способ! Вот так сделал для тестирования. Прописал в node.tpl.php

<style type="text/css" media="all">
@import url("/sites/all/themes/admin/css/daterangepicker.css");
</style>
<script type="text/javascript" src="/sites/all/themes/admin/js/daterangepicker.js"></script>
<script type="text/javascript" src="/sites/all/themes/admin/js/moment.min.js"></script>
    <script>

(function ($) {
  Drupal.behaviors.mytemplate = {
    attach: function (context, settings) {

      if ($('.field-type-datetime').length > 0) {
        moment.locale('ru');
        $('.field-type-datetime input.date-clear').daterangepicker({
          singleDatePicker: true,
          timePicker: true,
          timePicker24Hour: true,
          timePickerIncrement: 10,
          parentEl: '.main-wrapper',
          autoApply: true,
          autoUpdateInput: false,
          locale: {
            applyLabel: 'Применить',
            cancelLabel: 'Отмена',
            toLabel: 'До',
            daysOfWeek: ['Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс', 'Пн'],
            monthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
            firstDay: 1
          }
        },
        function(start, end, label) {
          $(".field-type-datetime input.date-clear").val(start.format('DD.MM.YYYY - HH:mm'));
        }

      );
    }

    }
  };
}(jQuery));

  </script>
<div class="field-type-datetime">Date: <input type="text" class="date-clear"></div>

Аватар пользователя Sadchenko Sadchenko 16 февраля 2022 в 15:54

long.skinny.boy wrote: long.skinny.boy

Да пол часа назад пытался подключить эту библиотеку но неудачно. Не заработал календарь. Попробую тогда еще разок