Задать вопрос
  • Yii2 - как в ActiveForm сделать input type email?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Лучше вот так:
    <?=$form->field($model, 'email')->textInput([
                'type' => 'email',
                'placeholder'=> 'E-mail...'
            ]);?>
    Ответ написан
    Комментировать
  • Не могу реализовать форму на Nuxt + REST API Wordpress + Contact Form 7?

    Isolution666
    @Isolution666
    Full-Stack Developer
    const formdata = new FormData();
    formdata.append("your-name", "Bvz");
    formdata.append("your-email", "test@mail.com");
    formdata.append("your-subject", "Subject Text");
    formdata.append("your-message", "Test message");
    formdata.append("_wpcf7_unit_tag", "7061ed3"); // your uniq tag fron 
    
    const requestOptions = {
      method: "POST",
      body: formdata,
      redirect: "follow"
    };
    
    fetch("http://your.domain/wp-json/contact-form-7/v1/contact-forms/28/feedback", requestOptions)
      .then((response) => response.text())
      .then((result) => console.log(result))
      .catch((error) => console.error(error));


    Укажите _wpcf7_unit_tag без этого форма не будет отправлена.
    Обычно в шорткоде указан id он и есть _wpcf7_unit_tag
    А вот id надо взять из адресной строки, параметр post
    /wp-admin/admin.php?page=wpcf7&post=28&action=edit


    Локально это всё может не работать, но если указать реальную почту отправителя, на продакшене, при чём после @ должно идти имя вашего домена, для теста попробуйте например Postman если получите:

    {
        "contact_form_id": 28,
        "status": "mail_sent",
        "message": "Thank you for your message. It has been sent.",
        "posted_data_hash": "e3dfc8fb89a92eca04e644c72ee8e7d1",
        "into": "#7061ed3",
        "invalid_fields": []
    }

    Значит API работает.
    На локальном сервере письмо не отправиться с большой вероятностью, а на продакшене уже могут приходить.

    Contact Form 7
    Версия 5.9.3
    Автор: Takayuki Miyoshi
    Ответ написан
    Комментировать
  • Yii2, как вставить в sql запрос coalesce поле, массив из API?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Смысл был в том, чтобы разные данные соединить в один массив,
    и да Yii2 тут не при чём, это решается на чистом PHP:
    public static function viewAllOrders($uuid)
        {
            $url = self::url().'internalorder/'.$uuid;
            $response = self::get($url);
            $items = $response->json();
            $array = [];
            foreach($items['rows'] as $item) {
                $array[] = [
                    'id' => $item['id'],
                    'name' => $item['name'],
                    'created' => $item['created'],
                    'sum' => $item['sum'],
                    'vatSum' => $item['vatSum'],
                    'size' => $item['positions']['meta']['size'],
                    'state' => self::getInvoiceoutMetadataStates($item['state']['meta']['href'])
                ];
            }
            return [
                'count' => $items['meta']['size'],
                'rows' => $array
            ];
        }

    На выходе можно получить json который будет объединён из разных данных в единый ответ единоразово. Буду рад если кому-то помог с этим.
    Решение нашёл сам, готовых ответов не было.
    Использовать данное решение только на свой страх и риск.
    Ответ написан
    Комментировать
  • React (Next.js) как преобразовать "a" ссылки в тексте в "next/link"?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Решение возникло давно, так что если это актуально, то выход только один, превращать html в json
    https://www.npmjs.com/package/html2json
    А потом этот JSON превращать в JSX

    Идеально :)
    Ответ написан
    Комментировать
  • Почему первый элемент массива определён, а остальные undefined?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, CryptBomj
    undefined = это значит вернул НИЧЕГО.
    Ничего, это значит не пустая строка и не NULL, это значит что вообще ничего не вернул, если в вашем json есть эти значения, а вернулся undefined - значит вы не верно указали вложенность.
    var second = spreadsheet.getSheetByName("2)Склад"); // такие частности лучше избегать, добавьте класс или id чтобы если текст поменяется, приложение не сломалось

    Например "2)Склад" на "2) Склад" - и нужное коде уже не найдёт.

    Ещё одна странность в коде:
    Почему вы сравниваете со строкой ? typeof undefined - это не строка, это пустота
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    if (stolbec2[j] == stolbec1[l] && stolbec2[j] != undefined){
    ...
    }


    Вариации:
    if (stolbec2[j] == stolbec1[l] && !stolbec2[j]){
    ...
    }


    или
    if (stolbec2[j] == stolbec1[l] || !stolbec2[j]){
    ...
    }


    Я просто не знаю что возвращает json вы ведь с таблицей Excel работаете ?
    Задайте для третьего столбца значение по умолчанию, если вернёт undefined , то можно будет выводит значение по умолчанию, либо на значение пришедшее из таблицы, так сказать по ссылке.
    https://learn.javascript.ru/object-copy
    Ответ написан
  • Ошибка в путях при нахождении файла?

    Isolution666
    @Isolution666
    Full-Stack Developer
    https://www.tiny.cloud/docs/integrations/react/
    Если вы на React.js - вот решение
    <Editor tinymceScriptSrc={process.env.PUBLIC_URL + '/tinymce/tinymce.min.js'}>
    Ответ написан
  • Как починить BIOS и убрать Ubuntu с ПК?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Здравствуйте.

    Кому интересен исход этой странной истории, и кто попал в подобную ситуацию.

    Посвящается.

    Если видите такое
    61e30609118a5801506809.jpeg
    на экране своего ПК то выход у вас следующий, перепрошить БИОС, при чём как системный так и основной, тогда появится привычный вам БИОС. Вытаскивание таблетки БИОС (батарейки) эту проблему НЕ РЕШИТ. Если вы умеете прошивать, делайте на свой страх и риск, или принесите ваш ПК в мастерскую по ремонту оргтехники, и перепрошейте. Чтобы убедиться что вам ничего не сломали, попробуйте запустить ОС с флэшки, это возможно, если работает, тогда вы починили БИОС. По поводу BitLocker. Тут сложнее. Если в БИОС вы поменяли UEFI в Legacy, то можно зайти на рабочий стол, или найти файл с ключём восстановления. Но особо не радуйтесь, так как это просто удача. В противном случае вы увидите "Warning. Boottable device was not fount."

    625c4f753f8d1886370374.jpeg

    Вы не сможете запустить зашифрованный диск, поэтому это можно увидеть на вашем дисплее, чтобы видеть настройки Windows 10 - уберите Legacy из UEFI, или наоборот, одна из опций может позволить запустить настройки.

    Что это даёт?
    Если вы отчаялись, и уже нет никаких иных возможностей расшифровать данные, тогда вы можете перезатереть диск новой установкой винды на уже установленные данные, вы их 100% потеряете, хотя поговаривают что не возможно полностью перезатереть данные на диске, в глубинных слоях всё же можно найти удалённые файлы, благо, такие программы есть, но они стоят дорого, хотя для кого-то 3 000 - 10 000 рублей не такие уж большие деньги. Так же есть утилиты, которые взламывают зашифрованные диски путём агрессивных атак на систему (алгоритм чем-то напоминает майнинг криптовалют), то есть вероятность взлома есть, но опять же на свой страх и риск. Программы и утилиты для таких дел стоят дорого, если и есть бесплатные, то я не гарантирую безопасность, как собственно и положительный результат. Некоторые компании и разработчики могут вернуть вам деньги, если программа не решила вашу проблему (ищите, есть ли политика возврата средств, порядочные компании обычно возвращают). Если у вас есть знакомые, которые работают в спецслужбе, тоже можете попытать удачу, чтобы они вам помогли с расшифровкой.
    По некоторым данным, уязвимости в BitLocket всё же есть, это политика компании MicroSoft, чтобы сотрудничать со спецслужбами (ФБР и ФСБ), так что не думайте, что вы защитите ваши данные, как оказалось бекдор на такой экстренный случай найдётся, и вас привлекут к ответственности в случае получения компромата на вашем диске. Так что если хотите скрыть, спрятать и зашифровать ваши данные, это не поможет. Только 100% уничтожение носителя. Выдохнуть могут лишь те, кому нечего скрывать, простым смертным диск расшифровать не удастся.
    Ответ написан
    Комментировать
  • Почему получаю ошибку Error: ENOENT: no such file or directory, scandir?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Он не может найти директорию, а webpack не может это собрать.
    У вас в пути к считыванию файлов должен быть абсолютный путь __dirname

    Пример:
    path: path.join(__dirname, `../static/images/${id}.png`)


    Укажите правильную директорию до файла, тогда файл найдётся и не будет "ошибки директории", возможно нет самого файла, тогда его нужно туда положить. Лучше конечно сделать проверку, что если файла нет, тогда показать что-то другое, сообщение какое-то, если всё ок, показать файл.
    Ответ написан
    Комментировать
  • Как мне по дефолту отключить ряд "First Y Data 1 - portfolio pnl"на диаграмме?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Возможно я не вовремя, или уже не актуально, но мало ли,
    вдруг вам нужно скрыть легенды.
    Это такие пояснения к графику, цветной круг и пояснение
    если по нему кликнуть, то исчезнет из категории та, по которой кликнули

    61f5b0c8b8c62018207064.jpeg

    https://apexcharts.com/docs/options/legend/ - Документация
    Чтобы скрыть легенды, нужно в опциях указать это:
    legend: {
          show: false
    },


    Управлять легендами можно вот так:
    https://codepen.io/junedchhipa/pen/YJQKOy?editors=0010

    Вдруг кому пригодится.
    Ответ написан
    Комментировать
  • Как отправить даные с кастомного списка в react-hook-form?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Александр, здравствуйте.
    --
    Я так понял речь идёт об этой библиотеке.
    import Select from 'react-select'

    Согласно документации по React JS, данные заносятся в value, а данные по умолчанию в defaultValue. Если использовать только value, React будет ругаться на то что эти данные не под его контролем.
    Аффтарр этого плагина не стал заморачиваться и использовал те же аттрибуты что и в React.
    Получается следующее.

    <Select
      isMulti // разрешить множественный выбор
      placeholder="Choose country" // текст в поле если пусто
      closeMenuOnSelect={true} // разрешать кнопку удаления тегов внутри инпут
      value={countryOptions.find(obj => obj.value === select)} // тут выбранные страны
      defaultValue={select} // тут из стейта по умолчанию
      name="country"  //  имя селекта
      onChange={handleChange} // сюда можно вставить функцию которая будет следить за событиями
      options={countryOptions} // массив данных, откуда выбираются страны
      styles={countryStyles} // стилистика, цвета и размеры
    />


    Вот собственно и получается
    const [select, setSelect] = useState([countryOptions[0], countryOptions[7]])

    Вот текущий стейт, в котором по умолчанию countryOptions показывает первую и восьмую запись.
    Что такое реструктуризация данных, надеюсь, вы знаете.
    setSelect() поможет мутировать стейт.
    Получить и передать, то что в стейте select.

    Профит ?
    Ответ написан
    6 комментариев
  • Почему говорят что jquery не нужен?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Эмм...
    Я почитал комментарии в разных источниках, и на разных сайтах.
    Короче. Смысл в том, что jQuery морально устарел (не для меня, в общественном плане и смысле), сейчас jQuery уже не впечатляет так как раньше, соответственно, раз хайп улетучился, значит эта тема уже зашквар. Баян. Это как рассказывать смешной анекдот, который придумали 50 лет назад. Дело не в том, хороша шутка, или нет, просто уже надоело, все уже знают и слышали. Так получилось и с jQuery.
    Уже не цепляет. Ну и сейчас делать сайты на html\css\js уже не круто.
    Опять же, аргументирую. Упомянутые React/Angular/Vue - это инструменты, которые делают SSR, SPA, PWA. Да, можно заморочится и сделать такой сайт на jQuery, кто мешает? Делайте!
    Но зачем. С таким же успехом можно вбивать гвозди кулаком, зачем мне молоток? Я и так забью.

    Чтобы вы поняли, прошу успокоится, вдохнуть воздуха, и услышать:
    Заказчику не важно какой вы гуру в jQuery или JavaScript, пишите вы код на Java или на Паскале.
    Заказчику важен РЕЗУЛЬТАТ. То что можно быстро сделать и запустить. Зачем писать месяцами и годами с нуля, по хардкору, если можно взять готовое решение и развернуть, но не потому что кто-то не может или не умеет, и даже не в том, популярен jQuery, или нет, просто это быстрее! Вот и всё.
    Вся популярность в скорости. Поэтому зародились CMS, фреймворки, препроцессоры, webpack, Gulp, Git. Именно поэтому развивается NoCode, потому что уже не важно, можешь или нет, проект нужен вчера, и если он работает и делает то что хочет заказчик, по барабану вообще, на Tilda он, на WordPress или на Magento. Да хоть да Друпале или на Джумле. Я раньше тоже бомбил за хардкор, чтобы всё с нуля, свежее и новое, а на деле, тривиальные задачи. Ничего нового! От слова СОВСЕМ.
    Всё что делают компании, это просто копипастят друг у друга, ну UI улучшат, цвет поменяют, более быстрее загружается сайт, или глифы новые. Всё! Мне вообще не мешает jQuery.
    Если надо я и на нём напишу что-нибудь.

    P.S. все средства хороши, если они решают поставленную задачу.
    Ответ написан
    Комментировать
  • Как в React изменить значение адресной строки?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Самый примитивный и простой способ, это подключить свой API, или MongoDB, GraphQL.
    Потом асинхронно добавляешь в мутации события на изменения тех данных, которые есть в карточке.
    Всё можно делать на одной странице через состояния, меняешь их и сохраняешь. Если нужны откаты по истории действий - это редакс. Копировать ссылки, куда-то переходить, это плохой UI, пользователи привыкли получать результат сразу, по клику, а это очень сложные телодвижения. Зачем тогда React )))
    Ответ написан
    Комментировать
  • Как изменить ширину столбца?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Если используете Bootstrap, или ваша таблица width:100%;
    самое разумное, что вы можете сделать, это растянуть ячейку таблицы <td>...</td>
    самим контентом.

    Очевидно этот вопрос возник, из-за того что таблица игнорирует ширину столбца, даже если её задать шапке.

    Не забудьте элементу дать фиксированную ширину (длину), и display: block;
    Или table, в идеале, если таблица будет собираться из массива, тогда вы в цикле укажете один элемент со свойствами контента, который размножится и даст одинаковую ширину у конкретного столбца. Я не знаю всей ситуации, но иногда лучше строить контент на grid или flex, потому что в мобильной версии сайта или приложения таблица может не влезть, и придётся делать нижний скролл, а если таблица на "гридах" или "флексах" то это можно обыграть на @media (...) CSS
    Может кому пригодится: https://1linelayouts.glitch.me/
    Успехов !
    Ответ написан
    Комментировать
  • React Ant Design - как правильно разбить Layout? И как можно реализовать Routing с разным Layout?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Я понял, что никто не читает документацию ))
    Но возможно вы не знали что именно искать, и не умение задавать правильные вопросы
    Приводит к неправильным ответам.
    Я понял вас благодаря подробному объяснению.
    ваша подсказка тут

    Вы ищите children `React`
    - https://ru.reactjs.org/docs/composition-vs-inherit...
    - https://medium.com/@stasonmars/%D0%BF%D0%BE%D0%B3%...

    Первая ссылка: пример из документации на примере классов
    Вторая ссылка: примеры реализации и использования children


    Для тех кто хочет юзать функции а не классы, есть вот такое решение:
    Ваше решение здесь


    import React from 'react'
    import { HeadProvider, Title  } from 'react-head'
    import { Link, useLocation } from 'react-router-dom'
    
    export function AdminLayout({children, title = 'Your title'})
    {
        
        let location = useLocation()
    
        return (
            <>
                <HeadProvider>
                    <Title>{title}</Title>
                </HeadProvider>
                <header>
                    <nav>
                        <ul>
                            <li>
                                <Link to="/">Home</Link>
                            </li>
                            <li>
                                <Link to="/about">About</Link>
                            </li>
                            <li>
                                <Link to="/dashboard">Dashboard</Link>
                            </li>
                        </ul>
                    </nav>
                </header>
                {location.pathname} {/* Здесь инфа о текущей ссылке после слэша */}
                {children} {/* Здесь будет информация из компонента который обернёте */}
                <div>Footer</div>
            </>
        )
    }


    Обёртку делаем вот так:

    import React from 'react'
    import { AdminLayout } from './components/AdminLayout'
    
    export default function About() 
    {
        const Title = 'About'
        
        return (
            <AdminLayout title={Title}>
                <h2>{Title}</h2>
                <p>there is some fucking text that is not interesting to anyone.</p>
            </AdminLayout>
        )
    }




    Профит ?
    Ответ написан
    2 комментария
  • Как решить ошибку Use of undefined constant php - assumed 'php'?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    На будущее всем тем, кто кодит в браузере в редакторе кода.
    Если вы пользуетесь редакторами кода на хостинге, или используете ISP Manager
    После первого сохранения, будет казаться что у вас сохранился код, в следующий раз, после открытия, вы можете выяснить, что редактор кода решил всё слепить в одну строку.
    Более того у ISP Manager есть баг потери замыкающих скобок, фигурных скобок и прочего в этом духе. Повторюсь, ошибка синтаксиса выявляется после закрытия страницы с кодом, и при повторном открытии подсветка синтаксиса может съехать.
    Поэтому, если не хотите подобных проблем, старайтесь не программировать в браузере, в редакторе кода. Как я понял, это баг одной и той же библиотеки, которую применяют везде где есть редакторы кода и подсветка синтаксиса. Используйте специальные программы или IDE чтобы исключить деформацию кода после перезалития.
    Ответ написан
    Комментировать
  • [Yii2] Как добавить id полям формы, при использовании ActiveForm?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Например так:

    <?php $form = ActiveForm::begin(['id' => 'form-add-video']); ?>
                <?= $form->field($model_video_form, 'name')->textInput(['id' => 'your_id', 'placeholder' => 'your place holder'])->label('Название (для отображения в списке)') ?>
                ...


    В квадратные скобочки вписываем массив данных в textInput() - и всё :)
    Ответ написан
  • Как задать value для CKEditor Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Например так:
    <?= $form->field($post, 'text')->widget(CKEditor::className(),[
        'editorOptions' => [
            'preset' => 'full',
            'inline' => false, 
        ],
    ])->textarea(['value' => 'Ваш текст value']); ?>

    Но лучше через контроллер передать значение
    $post->text = 'Ваш текст value';
    Ответ написан
    Комментировать
  • Как сделать стоп-слова на Yii2?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Самое разумное решение, какое вообще мне пришло, хоть и прошло уже много времени с того момента, как я задал этот вопрос - так это вот эта страница - fspamlist.com/index.php?c=api

    По API мы проверяем аж 3 параметра - email , login , IP-adress

    Что даёт этот инструмент ))) Если хотя бы один из параметров вернёт FALSE - можем отказать пользователю хоть в чём (регистрация, авторизация, комментарий, отправка сообщений)
    Валидаторы на Yii2 связанные с API я уже писал, так что проверку можно повесить хоть на какое поле ввода, или вообще на все, смысл в том чтобы в принципе проверить, кто пытается ворваться в поля ввода, и если данный пользователь в чёрном списке СПАМА - то мы ему отправляем бан.
    Ответ написан
    Комментировать
  • Почему Google Client API не даёт имя пользователя?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Ошибка была в "скоупах", а так получается то, что нужно!
    public function getClientGoogle() 
        {
            $client = new Google_Client();
            $client->setClientId(Yii::$app->google->Client_Id);
            $client->setClientSecret(Yii::$app->google->Secret);
            $client->setRedirectUri(Yii::$app->google->RedirectUri);
            $client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/plus.me'));
    
            $loginUrl = $client->createAuthUrl();
            return $loginUrl;
        }
    Ответ написан
    Комментировать
  • Как решить проблему View not Found – yii\base\ViewNotFoundException?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Напишите функцию.
    ...
    use yii\base\ViewNotFoundException;
    ...
    $path = Yii::getAlias('@web').'/order/index';
    ...
    try {
        // 1) тут пишите то что хотите проверить
        $this->render($path, ['dataProvider' => $dataProvider]);
    } catch (ViewNotFoundException $e) {
        // 2) тут выводите "удобную" ошибку, чтобы не закрывать ошибкой 500 или той которая вылезает
        $this->render('myerror');
    }
    ...


    Можно обратится и к Yii::getAlias('@frontend') - а вдруг проект лежит не в папке frontend ???
    Так что никаких return ...; Либо вы получите представление, либо myerror
    ViewNotFoundException это отслеживает.
    Да, если файл будет, ошибки не вылезут, а если файла не будет, вы столкнётесь с ViewNotFoundException

    Так почему бы сразу не отловить ошибку и просто вывести её в виде текста на странице?
    Гораздо лучше чем ошибка на всю страницу.

    Ну ведь Easy? Правда? :)))
    Ответ написан
    Комментировать