Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
boolboost
@boolboost
Все по разному решают
С размерами картинок
Ну и для типографии это зло
Когда везде разный размер и цвет текста
Но друпал чистит, и хорошо...
Ivan
@Chi-teck

чем кста опасны style теги в содержимом?

Любой пользователь сможет поломать верстку. Например сделать окно на всю страницу через абсолютное позиционирование и вставить туда какой нибудь неприличный текст огромным шрифтом.

boolboost
@boolboost
))
Ну да
Anatoly
@politsin

Коллеги, добрый день.
Вопрос по D8 FAPI + AJAX:
Хочу аякс-сабмит, который бы содержал аякс респонс, меняющий хтмл на странице.

1) На фоме висит 2 аякс колбека при смене полей, которые добавляют в новые поля во врапперы.
Тут вроде всё понятно, сделано так, как в модуле examples, всё отлично работает
2) Хочу на сабмит повесить AJAX.
Делаю это так:

    $form['app-create']['actions']['submit'] = [
      '#type' => 'submit',
      '#attributes' => [ 'class' => ['btn', 'btn-success']],
      '#value' => $this->t('Create New App'),
      '#ajax'   => [
        'callback' => '::AjaxSubmit',
        'effect'   => 'fade',
        'progress' => ['type' => 'throbber', 'message' => NULL,]
      ],
    ];

AJAX-функция выглядит так:

public function AjaxSubmit(array &$form, FormStateInterface $form_state) {
    $response = new AjaxResponse();
    $values = $form_state->getValues(); \\ Про эту строчку у меня вопрос
    dsm($values);
    $otvet = 'Ответ';
    $response->addCommand(new HtmlCommand('#edit-app-create .details-wrapper', $otvet));
    return $response;
}

Беда в том, чо $form_state в этой функции отличается от общего $form_state'a.
Он не содеждит добавленные в форму поля
и он не похватывает значения, переданные во время buildForm (напр $form_state->foo='bar')

Подскажите, что я делаю не так?

KarmaBot
@KarmaBot
Не узнал тебя, @politsin. Богатым будешь :)
Anatoly
@politsin

Блин, даже если забыть о AjaxResponce $form_state разный :(
В первом случае всё норм с "переданные во время buildForm (напр $form_state->foo='bar')"

    $form['app-create']['checkbox'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Setup Domen'),
      '#ajax'   => [
        'callback' => '::CheckboxCallback',
        'wrapper'  => 'checkbox-wrapper',
        'event'    => 'change',
        'effect'   => 'none',
        'progress' => ['type' => 'throbber', 'message' => NULL,]
      ],
    ];

во втором случае всё плохо с "переданные во время buildForm (напр $form_state->foo='bar')"

    $form['app-create']['actions']['submit'] = [
      '#type' => 'submit',
      '#attributes' => [ 'class' => ['btn', 'btn-success']],
      '#value' => $this->t('Create New App'),
      '#ajax'   => [
        'callback' => '::AjaxSubmit',
        'wrapper'  => 'actions-wrapper',
        'effect'   => 'fade',
        'progress' => ['type' => 'throbber', 'message' => NULL,]
      ],
    ];
KarmaBot
@KarmaBot
@politsin, чтобы показать длинный листинг кода желательно использовать pastebin-сервис, например gist.github.com или laravel.io/bin.
Anatoly
@politsin
Оказалось проглема в том, что форму надо ребилдить:
/**
   * Implements a form submit handler.
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $form_state -> setRebuild(true);
  }
Anatoly
@politsin

Продолжаю общаться с собой по D8 FAPI + AJAX
2016-07-29_14-22-43.png
politsin @politsin Мастер костылей!
Alan Bondarchuk
@fortis
@politsin $_post надо через sanitize функции пропускать какой нить чекплейн хотя бы
это пользовательские данные
@politsin и вероятно элементы надо добавлять не в аякс колбеке а в конструкторе формы чекать формстейт и добавлять по условию
форма когда ребилдится вызывает конструктор формы
на это и опирайся добавляй там элементы. а не в момент когда уже сабмит нажали - тут уже обработка сабмита только)
Anatoly
@politsin
@fortis спасибо!
KarmaBot
@KarmaBot
Спасибо (+1) для @fortis принято! Текущая карма +31.
Anatoly
@politsin
Элементы добавлял как в форм-экзампле.
Нигде не мог найти как подругому их добавить, везде в качестве примера такой код: делаем враппер, потом в колбеке возвращаем кусок формы.
Alan Bondarchuk
@fortis
ага именно потому что новый элемент уже создан к этому моменту)
при ребилде
alexd73
@alexd73
Привет! Подскажите, если указываешь зависимости для модуля, надо проверять на наличие модуля перед вызовом функции из него?
KarmaBot
@KarmaBot
Не узнал тебя, @alexd73. Богатым будешь :)
alexd73
@alexd73
т.е. в info dependencies указаны, то можно смело использовать эти модули?
Alexander Dubovskoy
@adubovskoy
чтоб подстраховаться, лучше через function_exists .
в .info оно то хорошо, но проверяет только в момент включения модуля. т.е. если потом чьи-то кривые руки его удалили, то повалится.
alexd73
@alexd73
@adubovskoy так и сделал. Спасибо!
KarmaBot
@KarmaBot
Спасибо (+1) для @adubovskoy принято! Текущая карма +6.
Alan Bondarchuk
@fortis
@alexd73 @adubovskoy это и хорошо и плохо, такая проверка может прятать проблему, лучше взвесить всеравно
часто лучше получить заслуженный фатал чтобы найти и оторвать те самые ручки))) чем не увидеть его
но если без зависимости можно обойтись то достаточно function_exists / module_exists
dru2
@dru2
Добрый день
KarmaBot
@KarmaBot
О! @dru2! Сто лет не виделись!) Как жизнь молодецкая? Рассказывай :)
dru2
@dru2
Есть вопрос по кешированию в магазине.
Drupal 7 + Commerce
Каталог сделан с помощью таксономии.
Для категорий используются панели и представление.
Необходимо кешировать страницы категорий.
Модулей кеширования достаточно, но есть проблема при редактировании товара.
Кеш не сбрасывается.
Перебираю готовые модули.
Добрался до правил кеширования с помощью rules.
Пока не получается.
Можно узнать, есть ли что-то готовое для подобных требований или писать самому ?
Alan Bondarchuk
@fortis
@/all если у кого-то используется такая древность как OAuthConnector https://www.drupal.org/project/oauthconnector
попробуйте патчик https://www.drupal.org/node/2776341 (SecurityTeam вынесли в паблик так как у модуля нет релизов)
dru2
@dru2
В модуле devel есть блок выполнения php кода.