Задать вопрос
  • Почему не видно свойства?

    @MikMik Автор вопроса
    Redis не понадобился, хотя и через него тоже был вариант сделать
    Написано
  • Почему не видно свойства?

    @MikMik Автор вопроса
    Дело было действительно в разных процессах. Как только воркеры запускаются они становятся независимыми процессами и не имеют ни какого отношения к классу который их запустил, все переменные которые работают в одном воркере недоступны в другом.
    Задача была передать параметры из контролера в веб-сокет.
    Решение - компонента воркера Channel. Код примерно такой
    Воркер
    class WorkermanWebSocketController extends Controller
    {
    public function initWorker()
       {
          $channel_server = new ChannelServer('127.0.0.1', 2206);
    
          $wsWorker = new Worker("websocket://127.0.0.1:8080");
    
          $wsWorker->onWorkerStart = function () use ($wsWorker) {
             ChannelClient::connect('127.0.0.1', 2206);
    
             ChannelClient::on('chat_message', function ($data) use ($wsWorker) {
                // отправляем сообщения кому надо...
             });
          };
    }


    Контроллер
    private function sendToWebSocket(array $message)
        {
            ChannelClient::connect('127.0.0.1', 2206);
            ChannelClient::publish('chat_message', $message);
        }
    Написано
  • Почему не видно свойства?

    @MikMik Автор вопроса
    Я перепробовал уже все наверно способы, и через global и через use, определял ее и в функции и в классе... Ни чего не помогает, все что было записано в первом воркере не видно во втором.
    Написано
  • Как правильно сформировать SQL запрос?

    @MikMik Автор вопроса
    alexalexes, да, уже потыкал )
    Написано
  • Как правильно сформировать SQL запрос?

    @MikMik Автор вопроса
    Спасибо огромное! Не понял как но все работает. Надо почитать про эту функцию.
    Написано
  • Как сохранить форматирование таблицы после клонирования строки в PHPWord?

    @MikMik Автор вопроса
    SymphoGraph, так в мануале нет информации о том как их туда передавать.
  • Как оформить вывод значений в PHP из разных строк БД без повторений?

    @MikMik
    Твой запрос выдает ровно то же самое что и в моем варианте. Не пойму почему ты решил, что если пользователю напишет новый человек то он не выведется? Если в таблице есть запись то она в любом случае выведется.
  • Как динамически добавить GridView на страницу?

    @MikMik Автор вопроса
    вью:
    update.php
    <div class="estimate-update">
    
        <h1><?= Html::encode($this->title) ?></h1>
    
        <?= $this->render('_form', [
            'model' => $model,
        ]) ?>
    
        <?php
    
        // echo "<pre>";
        // print_r ($sections);
        // echo "</pre>";
        // die;
        if (!$model->isNewRecord) {
            foreach ($sections as $data) {
                echo $this->render('_section', [
                    'resources' => $data['resources'],
                    'section' => $data['section'],
                    'model' => $model,
                ]);
            }
    
            Pjax::begin(['id' => 'new_estimate_section']);
            
            echo (Html::a('Добавить секцию', [
                'ajax-create-section', 
                'estimate_id' => $model->id], 
                ['class' => 'add-new-section btn btn-primary']));
            
            Pjax::end();
    
            
        }
        ?>
    
    
    </div>


    _section.php
    <?php
    
        Pjax::begin(['id' => 'estimate_section-' . $section->id]);
        ?>
    
        <?= GridView::widget([
            'dataProvider' => $resources,
            'summary' => false,
            'options' => [ 'style' => 'table-layout:fixed;' ],
            'showFooter' => true,
            'placeFooterAfterBody' => true,
            'emptyText' => '',
            'columns' => [
                [
                    'class' => 'yii\grid\CheckboxColumn',
                    'footer' => Icon::show('trash'),
                    'contentOptions' => ['style' => 'width:25px;'],
                ],
                [
                    'attribute' => 'resourceType.short_name',
                    'label' => 'Тип',
                    'contentOptions' => ['style' => 'width:30px;'],
                ],
    
                [
                    'attribute' => 'name',
                    // 'contentOptions' => ['style' => 'width:400px;'],
                    'footer' => Typeahead::widget([
                        'name' => 'twitter_oss',
                        'options' => [
                            'placeholder' => 'Введите название ресурса ...',
                            'autocomplete' => 'off',
                        ],
                        'pluginOptions' => [
                            'hint' => false,
    
                        ],
                        'dataset' => [
                            [
                                'prefetch' => Url::to(['resource-list']),
                                // 'local' => $datas,
                                'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                                'queryTokenizer' => "Bloodhound.tokenizers.whitespace",
                                'display' => 'value',
                                // 'templates' => [
                                //     'notFound' => '<div class="text-danger" style="padding:0 8px">Unable to find repositories for selected query.</div>',
                                //     'suggestion' => new JsExpression("Handlebars.compile('{$template}')")
                                // ]
                            ]
                        ],
                        'pluginEvents' => [
                            "typeahead:select" => 'function(e, suggestion) {
                                $.ajax({
                                    url: "ajax-add-resource",
                                    data: {
                                        id: suggestion.id, 
                                        section_id:' . $section->id . '}
                                }).done(function(d) {
                                    $("#new_resource_id").select2("close");
                                    $.pjax.reload({container:"#estimate_section-' . $section->id . '"});
                                });
                                console.log(suggestion); }',
                            "typeahead:close" => "function(e, suggestion) { console.log(e.target.value); }",
                        ]
                    ])
                ],
                [
                    'class' => 'app\components\grid\InputColumn',
                    'attribute' => 'quantity',
                    'header' => 'Кол-во',
                    'contentOptions' => ['style' => 'width:60px'],
                ],
                [
                    'attribute' => 'unit.name',
                    'header' => 'Ед.изм',
                    'contentOptions' => ['style' => 'width:60px;'],
                ],
                [
                    'class' => 'app\components\grid\InputColumn',
                    'attribute' => 'price',
                    'header' => 'Цена',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'summ',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'margin',
                    'contentOptions' => ['style' => 'width:40px;'],
                ],
                [
                    'attribute' => 'price_with_margin',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'summ_with_margin',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
    
            ],
        ]); ?>
    
        <?php Pjax::end() ?>


    _new_section.php
    <?php
        Pjax::begin(['id' => 'estimate_section-' . $section_id]);
        ?>
    
        <?= GridView::widget([
            'dataProvider' => $resources,
            'summary' => false,
            'options' => ['style' => 'table-layout:fixed;'],
            'showFooter' => true,
            'placeFooterAfterBody' => true,
            'emptyText' => '',
            'columns' => [
                [
                    'class' => 'yii\grid\CheckboxColumn',
                    'footer' => Icon::show('trash'),
                    'contentOptions' => ['style' => 'width:25px;'],
                ],
                [
                    'attribute' => 'resourceType.short_name',
                    'label' => 'Тип',
                    'contentOptions' => ['style' => 'width:30px;'],
                ],
    
                [
                    'attribute' => 'name',
                    // 'contentOptions' => ['style' => 'width:400px;'],
                    'footer' => Typeahead::widget([
                        'name' => 'twitter_oss',
                        'options' => [
                            'placeholder' => 'Введите название ресурса ...',
                            'autocomplete' => 'off',
                        ],
                        'pluginOptions' => [
                            'hint' => false,
    
                        ],
                        'dataset' => [
                            [
                                'prefetch' => Url::to(['resource-list']),
                                // 'local' => $datas,
                                'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                                'queryTokenizer' => "Bloodhound.tokenizers.whitespace",
                                'display' => 'value',
                                // 'templates' => [
                                //     'notFound' => '<div class="text-danger" style="padding:0 8px">Unable to find repositories for selected query.</div>',
                                //     'suggestion' => new JsExpression("Handlebars.compile('{$template}')")
                                // ]
                            ]
                        ],
                        'pluginEvents' => [
                            "typeahead:select" => 'function(e, suggestion) {
                                $.ajax({
                                    url: "ajax-add-resource",
                                    data: {
                                        id: suggestion.id, 
                                        section_id:' . $section_id . '}
                                }).done(function(d) {
                                    $("#new_resource_id").select2("close");
                                    $.pjax.reload({container:"#estimate_section-' . $section_id . '"});
                                });
                                console.log(suggestion); }',
                            "typeahead:close" => "function(e, suggestion) { console.log(e.target.value); }",
                        ]
                    ])
                ],
                [
                    'class' => 'app\components\grid\InputColumn',
                    'attribute' => 'quantity',
                    'header' => 'Кол-во',
                    'contentOptions' => ['style' => 'width:60px'],
                ],
                [
                    'attribute' => 'unit.name',
                    'header' => 'Ед.изм',
                    'contentOptions' => ['style' => 'width:60px;'],
                ],
                [
                    'class' => 'app\components\grid\InputColumn',
                    'attribute' => 'price',
                    'header' => 'Цена',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'summ',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'margin',
                    'contentOptions' => ['style' => 'width:40px;'],
                ],
                [
                    'attribute' => 'price_with_margin',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
                [
                    'attribute' => 'summ_with_margin',
                    'contentOptions' => ['style' => 'width:80px;'],
                ],
    
            ],
        ]); ?>
    
        <?php Pjax::end() ?>


    Новая таблица вставляется но взамен кнопки "Добавить секцию". Но это понятно так как она завернута в тот же pjax. Но почему то не работает typeahead.

    Вопросов - как все таки вставить эту таблицу правильно, и чтоб typeahead работал и чтоб кнопка осталась

    Пробовал через JS ее вставлять, но чет мозгов не хватает это сделать.
  • Почему не выводятся данные через CONCAT?

    @MikMik Автор вопроса
    Михаил, В том то все и дело, что запрос рабочий, вбиваю его в phpmyadmin все гуд, а вот через AR не работает.
  • Почему не выводятся данные через CONCAT?

    @MikMik Автор вопроса
    Пробовал. Не в этом дело видимо.
  • Как вывести value всех отмеченных checkbox?

    @MikMik
    Попробуй так

    var data = $('input:checkbox:checked');

    Соберет в data все отмеченные чекбоксы
  • Как переписать запрос в ActiveRecord?

    @MikMik Автор вопроса
    Дмитрий, Добрый день!
    И все таки вопрос остался открытым. Сейчас есть другой но аналогичный запрос с подзапросом и на выходе требуется получить именно ActiveRecord, с createCommand() на выходе дает массив.
    Я так вроде все понимаю, как встроить подзапрос, но не пойму как в данном случае написать условие типа a1.campaign_id = a.campaign_id в подзапросе
    Помогите плиз кто-нибудь!
  • Как переписать запрос в ActiveRecord?

    @MikMik Автор вопроса
    Дмитрий, Да я по сути так и сделал. Думал может можно как-то все это безобразие записать через ::find()
  • Почему отображаются две страницы?

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

    @MikMik Автор вопроса
    Daria Motorina, когда обращаешься к php файлам то все норм, сервер обрабатывает их как надо, а вот когда запрос на index.html то иногда вылезает второй файл, при этом нарушается работа JS на странице, а иногда не вылезает...
    Не могу понять зависимость.
  • Почему не выводится значение массива?

    @MikMik Автор вопроса
    function getUserLevels(userAddress) {
                    return new Promise(resolve => {
                        for (var i = 1; i < 9; i++) {
                            contract.methods.viewUserLevelExpired(userAddress, i).call({}, (err, result) => {
                                if (!err) {
                                    levels.push(result);
                                } else {
                                    console.log(err);
                                }
                            })
    
                        }
    
                        resolve(levels);
                    })
                }


    Функция которая заполняет массив. Тут вроде тож все норм...
  • Почему не выводится значение массива?

    @MikMik Автор вопроса
    Не пойму почему в верху (вывод консоли) в [ ] - пусто. Вроде ж массив заполнен?