Pavel8289
Total posts: 66
12 Июнь 2019 07:32

У меня есть модуль в каком форма в ней поля какие user заполняет и по ajax отправляются данные в Helper модуля и там через API Cobalt добавляется материал куда надо. С главной страницы где всего лишь модуль мой и mod_cobalt_records больше ничего нету, и данные через модуль хорошо добавляются (все поля из формы попадают куда надо). Но если из списка статей Cobalt то после заполнения данных (данные все до Helper попадают) не создается title статьи. Кто знает почему из списка статей какие получены кобальтом не правильно работает API ?

Код Helper

 include_once JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_cobalt' . DIRECTORY_SEPARATOR . 'api.php';
 .......
 .......
 .......

 $apiCobalt = new CobaltApi();

        $AddToDBresult = $apiCobalt->createRecord(
            [
                'title' => $full_name,
                'access' => 1,
                'published' => $published,
                'alias' => translit($full_name)

            ],
            7, //section
            7, // type
            [
                38 => $last_name,
                39 => $first_name,
                40 => $middle_name,
                24 =>  ['image' => $photo],
                26 => $univer,
                29 => $workplace,
                35 => 'SUBORDINATE',
                30 => $phone,
                27 => $year,
                28 => $degree,
                31 => $position,
                37 => $email_user
            ],// fields
            [$cat_id]

        );

Основной файл модуля

defined('_JEXEC') or die('Restricted access');


// Include the helper.
require_once __DIR__ . '/helper.php';

// Instantiate global document object
$doc = JFactory::getDocument();




$js = <<<JS
(function ($) {
    $(document).on('click', '#payment-form input[type=submit]', function () {

     if(
         $('#contact_form #payment-lname').val() !== "" &&
         $('#contact_form #payment-fname').val() !== "" &&
         $('#contact_form #payment-mname').val() !== "" &&
         $('#contact_form #payment-district').val() !== "" &&
         $('#contact_form #payment-email').val() !== "" &&
         $('#contact_form #payment-conditions').is(':checked')
     )
     {
      $('#payment-form input[type=submit]').attr('disabled','');

        /* Sivers (данные для передачи) - начало */
        var form = $('#contact_form').get(0);
        var formData = new FormData(form);
        formData.set('option', 'com_ajax');
        formData.set('module', 'enter_organition');
        formData.set('format', 'raw');
        /* Sivers (данные для передачи) - конец */


        $.ajax({
          type: 'POST',
          processData: false,
          contentType: false,
          data:  formData,
          success: function (response) {

                console.log(response);


              $('#payment-finish').html(response);
              $('#payment-finish input[type="image"]').trigger('click');

          },
          error: function (error) {
            console.log(error);
            $('#payment-finish').html(error);
          }
        });
        return false;
     }
      else {
      alert("Заполните все поля какие отмеченные * ");
      }

 });

})(jQuery)
JS;

$doc->addScriptDeclaration($js);



require(JModuleHelper::getLayoutPath('mod_enter_organition', $params->get('layout', 'default')));
?>

Последние изменения: 18 Июнь 2019


Sergey
Total posts: 13,748
13 Июнь 2019 08:10

Проще было бы показать из инспектора данные которые пересылаюстя аяксом. Не вижу тут наличие заголовка и как он передается. На принимащей var_dump($full_name) что быдет?


Pavel8289
Total posts: 66
13 Июнь 2019 10:41

Sergey Проще было бы показать из инспектора данные которые пересылаюстя аяксом. Не вижу тут наличие заголовка и как он передается. На принимащей var_dump($full_name) что быдет?

Заголовок у меня составной идет с 3 полей ( В админки так настроил),

 $('#contact_form #payment-lname').val() 
 $('#contact_form #payment-fname').val() 
 $('#contact_form #payment-mname').val()

В Helper я получаю все данные и потом их соединяю в 1 переменую и передаю это в Title API Cobalt

 $last_name = substr(htmlspecialchars(trim($_POST['payment-lname'])), 0, 100);
        $first_name = substr(htmlspecialchars(trim($_POST['payment-fname'])), 0, 100);
        $middle_name = substr(htmlspecialchars(trim($_POST['payment-mname'])), 0, 100);
        $full_name = $last_name . ' ' . $first_name . ' ' . $middle_name;

Sergey
Total posts: 13,748
14 Июнь 2019 11:58

Через API состовные заголовки не работают. Нужно напрямую передавать параметер title и составлять его самостоятельно. Или делать псевдо составные заголовки. Это когда в заголовке ни чего нет по сути или просто номер случайный, а на странице вы форматирвете другие поля, так что они выглядят как заголовок.


Pavel8289
Total posts: 66
15 Июнь 2019 05:55

Sergey Через API состовные заголовки не работают. Нужно напрямую передавать параметер title и составлять его самостоятельно. Или делать псевдо составные заголовки. Это когда в заголовке ни чего нет по сути или просто номер случайный, а на странице вы форматирвете другие поля, так что они выглядят как заголовок.

Я понимаю это Сергей. По этому я в переменую $full_name

$full_name = $last_name . ' ' . $first_name . ' ' . $middle_name;

Объединяю три поля ($last_name . ' ' . $first_name . ' ' . $middle_name ) и передаю в Title. В админки стоят как раз эти поля три в составном заголовки так как через сам шаблон кобальта заполяю как Админ (так быстрей и удобней), а пользователи через Форму модальную (на форме есть еще платежка liqpay).

$apiCobalt->createRecord(
[
'title' => $full_name,
'access' => 1,
'published' => $published,
'alias' => translit($full_name)
],

Я один и тот же модуль вывожу в 2 позиции. В первую позицию на главную, а вторая позиция в списках статей в шаблон /components/com_cobalt/views/records/tmpl/default.php. Для того чтоб этот модуль был только в списках кобальта

<section id="cobalt-section-<?php echo $this->section->id ?>">
<?php
if ($this->section->id == 7) { ?>
<h1><?php echo JText::_('MEMBERSHIP_TITLE_SECTION')?></h1>
<?php
jimport('joomla.application.module.helper');
 $module = JModuleHelper::getModules('become-membership');
$attribs['style'] = 'xhtml';
for ($i = 0; $i < count($module); $i++) {
echo JModuleHelper::renderModule($module[$i], $attribs);
} ?>
<?php } ?>
<?php echo $this->loadTemplate('markup_' . $this->section->params->get('general.tmpl_markup')); ?>
</section>

и Выходит что в самом списке не работает API правильно как не главной. Да, даные отправляет все кроме заголовка, переменая $full_name заполнена и стоит в APi Cobalt для поля title. Ошибка в том что в базу данных все приходит кроме поля Title, и выходит что в админки есть запись но она пустая на Title


Sergey
Total posts: 13,748
18 Июнь 2019 12:22

Pavel8289 Да, даные отправляет все кроме заголовка, переменая $full_name заполнена и стоит в APi Cobalt для поля title.

Выключи составной заголовок в настройках типа. Сделай нормальный заголовок. Ведь ты нормлаьный передаешь.

Работает на Cobalt