Советы по настройке компонента Chronoforms 6

В этой статье мы написали несколько советов по настройке компонента Chronoforms 6, которые также являются ответами на самые распространенные вопросы тех, кто только начинает работать с этим приложением.

От версии к версии расширение становится все «более условно бесплатным». В связи с этим при отсутствии приобретенного к нему ключа теперь могут возникнуть некоторые проблемы.

Устанавливаются все приложения пакета (компонент, модуль и плагин), как обычно, через менеджер расширений Joomla. Плагин находится в списке прочих плагинов Joomla 3 и по умолчанию отключен. Для того, чтобы можно было выводить форму на страницах сайта с его помощью, его необходимо включить. То же и для модуля: если есть готовая форма и для ее отображения нужен модуль, его необходимо опубликовать и добавить в настройки соответствующий форме алиас.

Шаблон административной панели управления расширением адаптивный, но тут есть один  небольшой момент: он абсолютно совместим только с дефолтными шаблонами админки joomla — Hathor и isis. Но при использовании сторонних его элементы управления могут отображаться некорректно. Например, при переключении на Vallis (на изображении выше именно этот шаблон) к нижней части скользящего меню элементов в редакторе формы  мы не добремся.

Теперь перейдем к наиболее распространенным вопросам настройки компонента.

Русификация панели управления компонентом Chronoforms 6

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

Для всех остальных доступных элементов эта версия компонента предлагает достаточно удобный функционал локализации. Перход к локализатору осуществляется по клику на пункт меню «languages». Там генерируется копия английской локализации с нужным тегом, над переводом которой и предстоит работать. Т.е. редактировать языковой файл панели управления приложением теперь можем прямо из админки.

Сейчас мы уже располагаем предварительной версией русификатора компонента и найти его вы можете на этой странице.

Подробнее о процессе локализации панели управления Chronoforms 6, а также самих форм обратной связи, можно узнать в разделе «Документация».

При обновлении расширения никакие файлы языкового перевода не затрагиваются, но будут удалены вместе с ним в случае деинсталляции.

Кириллица в полях формы с типами данных «alpha» и «alphanum»

К сожалению, проблема с кириллицей в полях формы с типами данных «alpha» и «alphanum» в Chronoforms 6 никуда не исчезает и нужно исправлять  соответствующий код самим. Здесь описан способ добавления поддержки кириллицы для 5-й версии. С шестой  - то же самое, только файл другой.

Ищем в файле www/libraries/cegcore2/libs/validate.php функцию:

  public static function alpha($value){
      return preg_match('/^[a-z ._-]+$/i', $value);
  }

и исправляем ее следующим образом:

  public static function alpha($value){
      return preg_match('/^[a-zA-Zа-яА-Я ._-]+$/i', $value);
  }

Затем ищем:

  public static function alphanumeric($value){
      return preg_match('/^[a-z0-9 ._-]+$/i', $value);
  }

и правим так:

  public static function alphanumeric($value){
      return preg_match('/^[a-zA-Zа-яА-Я0-9 ._-]+$/i', $value);
  }

Теперь текстовые поля с типами  данных «алфавитный» и «алфавитно-цифровой» должны поддерживать кириллицу.

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

Как убрать ограничение «15 displayed fields per form limit…»?

В Chronoforms 6 ограничение «15 displayed fields per form limit…» означает, что при отсутствии приобретенного к компоненту ключа на сайте будут отображаться только первые 15 элементов созданной формы обратной связи, вне зависимости от их функциональной направленности. Т.е., если вы поместили на форму такие элементы, как «CSS», «Multi field area», «Divider» и т.п., их количество также будет учитываться.

Как с этим справиться?

Открываем файл www/administrator/components/com_chronoforms6/chronoforms/controllers/manager.php, находим и комментируем следующие строки:

  if(\GApp::instance()->site == 'front'){
      $good = (\GApp::extension('chronoforms')->valid() OR !isset($connection['Connection']['params']['limited_edition']));
      if(!$good){
          $this->set('__viewslimit', 15);
      }
  }

Теперь на страницах сайта будут выводиться и работать все поля созданной формы.

Заодно можно убрать сообщение о незарегистрированном компоненте в админке. Для этого открываем файл www/administrator/components/com_chronoforms6/chronoforms/themes/default/layouts/default.php и комментируем или удаляем в нем такую строчку:

  $this->view('views.common.validationalert', ['ext' => 'chronoforms', 'name' => 'ChronoForms', 'msg' => '15 displayed fields per form limit, and a credits link at the bottom of the form']);

На этом самую серьезную проблему, связанную с отсутствием ключа валидации, можно считать успешно разрешенной. 

Как убрать копирайт под формой Chronoforms 6?

Убрать копирайт под формой Chronoforms 6 можно здесь же, в файле manager.php (см. выше). В самом конце кода, комментируем функцию целиком:

  function _finalize(){
          if(empty($this->tvout) AND \GApp::extension('chronoforms')->valid() == false){
              if(\G2\Globals::get('app') != 'wordpress'){
                  echo '<a href="http://www.chronoengine.com/" target="_blank" class="chronoforms6_credits">Form by ChronoForms - ChronoEngine.com</a>';
              }else{
                  echo '<h3>Form by ChronoForms - ChronoEngine.com</h3>';
              }
          }
      }

После этого копирайт не будет отображаться в футере формы на сайте.

***

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

 
Комментарии
  • #
  • Rafa
Подскажите, пожалуйста, получались ли у вас создать форму с калькулятором?
На их официально сайте, в FAQ есть инфа как делать, пробовал, но ничего не работает.
Ссылку ставить не буду, процитирую:

Цитата:
Assuimng your form has 3 fields, field 1, field 2 and field total, the fields "ids" are: field1, field2 and total respectively. In your form designer, open "Custom" and drag a JavaScript element, open the settings and enable the "Load on dom ready", then add this code:

Код:
$("#field1,#field2").on("change", function(){
$("#total").val(parseInt($("#field1").val()) + parseInt($("#field2").val()));
});


You may want to set an integer mask for your fields and set the default values to 0 based on your requirements.
  • #
  • s.elena133
Цитата:
ничего не работает
- понятие растяжимое)
Нет, калькуляторов не делали, но код, приведенный вами полностью рабочий, если делать так, как в приведенном куске пояснения с сайта.
Сейчас попробовала и все получилось.
Выдает, правда после заполнения первого поля NaN в результирующем поле. Но, думаю, что это вполне решится, если поставить по умолчанию нули во всех трех полях.
  • #
  • Rafa
Цитирую s.elena133:
Сейчас попробовала и все получилось.

Можете где нибудь на сайте пример привести.
Или скриншоты, как вы делаете, что у вас работает.
Уже все перепробовал не выходит.
  • #
  • s.elena133
Что именно пробовали?
Просто решительно не понимаю в чем проблема. Вы привели в цитате подробный мануал выполнения, яснее не бывает.
Берете три поля типа text. Берете элемент JS из группы Custom. Помещаете его на форму. Ставите галку "Загружать по со событию dom ready". Копипастите туда код, исправляя идентификаторы полей. Сохраняете, проверяете на сайте.
Все.
Элемент рабочий, багов нет. Код тоже рабочий.
  • #
  • Rafa
Понял, в Debugger высчитывается.
Я думал, он без перезагрузки страницы в поле Tolal сразу 0, который там по умолчанию стоит, превратит в сумму чисел, первых 2ух полей.
Интересно, а можно такое сделать там...
  • #
  • s.elena133
А форма без перезагрузки все и считает.
...onkeypress можно попробовать
  • #
  • Rafa
Цитирую s.elena133:
А форма без перезагрузки все и считает.
...onkeypress можно попробовать

Вы вводите цифры и он сразу в Поле Total считает?
Или после нажатия кнопки отправить значение поля Total идет на почту?
Т.е. я хотел бы, чтобы расчет суммы был сразу, до отправки формы.
https://ibb.co/cySmZJ
  • #
  • Rafa
Получилось показывать Итого, до отправки формы 8)
Жажду поделится, вдруг кому пригодится.
Код:$("#field1,#field2").on("change", function(){ $("#total").val(parseInt($("#field1").val()) + parseInt($("#field2").val())); $price = $('#total').val(); $("span#widget_calculator3new_value").text($price); });
  • #
  • Rafa
Ларчик просто открывался.
Нужно было взять у id="total" взять данные его value который нормально сразу считается, и поместить в переменную $price.
А потом передать его значение в виджет ниже span id="widget_calculator" какой-то, через:
$('widget_calculator').text ($price)
Добавить комментарий