Плагин доставки, добавить <script> в <head>

Руками если в index->head шаблона пишу: 

<script src="https://api-maps.yandex.ru/2.1/?apikey=мойключ&lang=ru_RU" ></script>

то якарта работает в корзине с моим кастомным способом доставки. Но почитал на форуме, что можно скрипт ключа карты добавить и через customFields() плагина. Решил реализовать и завис(, подскажите направьте пожалуйста в нужную сторону. Делаю так:

-------------------------
wa-plugins/shipping/myshipping/lib/myshippingShipping.class.php
   function customFields() {
      $this->registerControl('Yamapcustom', array($this, 'yaMapcontrol'));
      $fields['Yamapcustom'] = array(
         'value' => null,
         'title' => '',
         'control_type' => 'Yamapcustom'
   );

      return $fields;}

-------------------------
wa-plugins/shipping/myshipping/lib/myshippingShipping.class.php
   public function yaMapcontrol() {
      $yamapapi = wa()->getMap('yandex')->getJs(true);
      wa()->getView()->assign('yamapapi', $yamapapi);
      $path = $this->path;
      $view = wa()->getView();
      return $view->fetch($path . '/templates/yamap.html');
   }
-------------------------
wa-plugins/shipping/myshipping/templates/yamap.html
   {wa_dumpc($yamapapi)} //ВЫВОДИТ НУЖНЫЙ СКРИТП С КЛЮЧЕМ КАРТЫ НО В <BODY>
   $('{$yamapapi}').appendTo('head'); //ПРОБУЮ ДОБАВИТЬ ЕГО В <HEAD>. НЕ ПЕРЕДАЁТ. ДУМАЮ СКРИПТ НЕПОНИМАЕТ СМАРТИ

Что делаю не так, куда капать?

4 ответа

  • 1

    Ну и выводите его в body, чем он вам там мешает-то? :)

    • +1
      Алексеич Алексеич 20 февраля 2023 12:43 #
      • Если я этот скрипт публикую в <body> вот так {$yamapapi} то карта не запускается, получаю ошибку. В консоли, пишет: ymaps is not defined  переменная не работает?
      • Проверяю переменную {wa_dumpc($yamapapi)} она выводит скрипт в корзине. И если взять и скопировать прям этот скрипт и вставить руками в шаблон в <head>, то карта запускается. значит скрипт рабочий.
      • так же этот скрипт пробую вставить руками в wa-plugins/shipping/myshipping/templates/yamap.html, карта не запускается.

      Видимо то, что в инструкции ЯКарт сказано, что этот скрипт должен подключаться в <head>, обязательное условие.

      • +1
        replicant replicant 20 февраля 2023 13:40 #

        Видимо то, что в инструкции ЯКарт сказано, что этот скрипт должен подключаться в <head>, обязательное условие.

        Инструкция технически правильная, но, благодаря буквальному следованию таким предписаниям, <head> сайта со временем начинает напоминать помойку.

        Если подумать, то это ни разу не обязательное условие. Причем не стоит это делать именно так, как Яндекс завещал, чтобы не таскать карту по всем страницам сайта. Пусть подключается через <script></script> только там, где ей место. Как минимум ограничьте активацию скрипта через {$action == 'то, что вам надо'}, если уж он в <head> поселился.

        Вот пример из пошагового оформления для активации слоя карт уже на первом шаге для ряда плагинов доставки. Ключ лежит в параметрах витрины.

        • +1
          Алексеич Алексеич 20 февраля 2023 15:39 #

          Да знаком с помойкой в head и что на pagespeed влияет плохо.

          Но я выше показываю, что пытаюсь скрипт в <body> запустить изначально, но карта так не запускается, вот и пришел к выводу, что обязательно в <head> его грузить надо, согласно рекомендациям Яндекса.

          Хорошо если вы уверяете, что можно и в <body> скрипт оставить, тогда оставляю. Но почему он из него не подгружается, что я упустил? Буду признателен, если сможете подсказать.

          Что я имею, если пока отбросить переменную {$yamapapi}, которая должна подгружать скрипт apikey. И пробовать вручную прописать внешний скрипт с ключом, в файл плагина для вывода карты wa-plugins/shipping/myshipping/templates/yamap.html

          Так блок для карты выводится, но карта не грузится. ошибка ymaps is not defined

          Ок, переношу руками скрипт с ключом apikey в index.php в блок <head> шаблона

          а в wa-plugins/shipping/myshipping/templates/yamap.html оставляю


          Так карта грузится. То есть только когда ключ в хед удается запустить карту.

          ещё пробую через jq функцию .appendTo('head') добавить переменную со скриптом в хед 

          $('{$yamapapi}').appendTo('head');

          и строкой 

          $('<script src="https://api-maps.yandex.ru/2.1/?apikey=mykey&lang=ru_RU" type="text/javascript"></script>').appendTo('head');

          не получается, как буд-то что-то блокирует доступ к хед из плагина доставки. help!)


Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите