Size: a a a

2020 September 23

S

Sergey in OctoberCMS
Олег Покшин
так, вроде что-то не то. Окей, с помощью этих data атрибутов я стригерил событие после отправки формы, а как открыть незаметно для пользователя страницу, чтобы это увидели счетчики(метрики)?
как вариант посмотри что отправляет тильда в network
источник

S

Sergey in OctoberCMS
может там все просто
источник

ОП

Олег Покшин... in OctoberCMS
Константин Аникин
А для чего это нужно? Почему просто js-событием не обойтись?
мне понравилось как это реальзовано в тилде) Просто обычно нужно кучу счетчиков вешать на отправку какой-то формы ( а их много: и счетчиков и форм), далее какие-то формы появляются, исчезают. Так как в тилде это сделано, уменьшает на половину мороки (не нужно js править к каждому счеткику)
источник

КА

Константин Аникин... in OctoberCMS
Олег Покшин
мне понравилось как это реальзовано в тилде) Просто обычно нужно кучу счетчиков вешать на отправку какой-то формы ( а их много: и счетчиков и форм), далее какие-то формы появляются, исчезают. Так как в тилде это сделано, уменьшает на половину мороки (не нужно js править к каждому счеткику)
Спасибо 🙂
источник

S

Sergey in OctoberCMS
а нельзя просто цель повесить на отправку формы?
источник

КА

Константин Аникин... in OctoberCMS
Sergey
а нельзя просто цель повесить на отправку формы?
Логика от обратного, ты можешь формы добавлять удалять, и не надо морочиться с целями.
источник

КА

Константин Аникин... in OctoberCMS
После отправки каждая форма открывает какую-то уникальную страницу
источник

Р

Ростислав in OctoberCMS
return $query->where('name',$this->param('propertyType'));
А можно name которая достанется из базы модифицировать (применить str_slug к ней) перед выполнением where?
источник

Р

Ростислав in OctoberCMS
Хотя ладно, добавлю поле slug в базу. Но все же интересно, возможно ли такое.
источник

S

Serg in OctoberCMS
Всем привет, поставлена задача внедрить функционал дублирования текущего заказа в новый с изменением количества позиций, написал вот такую функцию:

public function onRepeatOrder($recordId = null) {
       if ($model = Order::find($recordId)) {

           $initialOrderStatus = OrderState::where('flag', OrderState::FLAG_NEW)->first();

           $clone                  = $model->replicate();
           $clone->id              = Order::withTrashed()->max('id') + 1;
           $clone->session_id      = session()->getId();
           $clone->order_number    = Order::withTrashed()->max('order_number') + 1;
           $clone->order_state_id  = $initialOrderStatus->id;

           $clone->save();

           Flash::success('This order has been repeated.');

           return $this->redirectToRepeatOrder();
       }

       return $model;
   }

Но проблема в том что связанные с заказом продукты в новом заказе отсутствуют, т.е. привязка продуктов не происходит, может кто помочь доработать функцию?
источник

КА

Константин Аникин... in OctoberCMS
Ростислав
return $query->where('name',$this->param('propertyType'));
А можно name которая достанется из базы модифицировать (применить str_slug к ней) перед выполнением where?
А как это возможно? Перед выполнением where применить к where?
источник

КА

Константин Аникин... in OctoberCMS
Типа у тебя из базы то ещё ничего не досталось, а ты перед тем как достать из базы, хочешь уже к этому что-то применить 🙂
источник

Р

Ростислав in OctoberCMS
вот и мне интересно)
источник

v

vladimir in OctoberCMS
Serg
Всем привет, поставлена задача внедрить функционал дублирования текущего заказа в новый с изменением количества позиций, написал вот такую функцию:

public function onRepeatOrder($recordId = null) {
       if ($model = Order::find($recordId)) {

           $initialOrderStatus = OrderState::where('flag', OrderState::FLAG_NEW)->first();

           $clone                  = $model->replicate();
           $clone->id              = Order::withTrashed()->max('id') + 1;
           $clone->session_id      = session()->getId();
           $clone->order_number    = Order::withTrashed()->max('order_number') + 1;
           $clone->order_state_id  = $initialOrderStatus->id;

           $clone->save();

           Flash::success('This order has been repeated.');

           return $this->redirectToRepeatOrder();
       }

       return $model;
   }

Но проблема в том что связанные с заказом продукты в новом заказе отсутствуют, т.е. привязка продуктов не происходит, может кто помочь доработать функцию?
$clone = $model->load({Связи для дублирования})->replicate();
$clone->push();


По идее должно получить все relations которые уже загружены и пушнуть вместе с клонированной моделью.
источник

S

Serg in OctoberCMS
vladimir
$clone = $model->load({Связи для дублирования})->replicate();
$clone->push();


По идее должно получить все relations которые уже загружены и пушнуть вместе с клонированной моделью.
не помогло
источник

v

vladimir in OctoberCMS
а модель наследована от Eloquent модели или от Rain модели?
источник

v

vladimir in OctoberCMS
$clone = $model->load({Связи для дублирования})->replicate();
$clone->push();

foreach ($clone->getRelations() as $relationName => $relationValue){
       $clone->{$relationName}()->sync($relationValue);
   }


Можно так еще, но это в принципе должно быть в абстракции push метода ядра октября
источник

S

Serg in OctoberCMS
vladimir
а модель наследована от Eloquent модели или от Rain модели?
по умолчанию rain
источник

S

Serg in OctoberCMS
vladimir
$clone = $model->load({Связи для дублирования})->replicate();
$clone->push();

foreach ($clone->getRelations() as $relationName => $relationValue){
       $clone->{$relationName}()->sync($relationValue);
   }


Можно так еще, но это в принципе должно быть в абстракции push метода ядра октября
пробовал возвращает:


"Call to undefined method October\Rain\Database\QueryBuilder::sync()" on line 2483 of D:\workspace\projects\outer\oc-nlv-web\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php
источник

v

vladimir in OctoberCMS
Serg
пробовал возвращает:


"Call to undefined method October\Rain\Database\QueryBuilder::sync()" on line 2483 of D:\workspace\projects\outer\oc-nlv-web\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php
Надо проверять что за связь, sync для many-to-many работает.
Возможно тебе нужна просто add.


тогда получается что-то вроде:
$clone = $model->load({Связи для дублирования})->replicate();
$clone->push();

foreach ($clone->getRelations() as $relationName => $relationValue){
   if (empty($relationValue)) {
       continue;
   }

   if ($relationValue instanceof \Illuminate\Database\Eloquent\Collection) {
   $clone->{$relationName}()->sync($relationValue->all());
   }
   
   if ($relationValue instanceof \Illuminate\Database\Eloquent\Model) {
       $clone->{$relationName}()->add($relationValue);
   }
}
источник