• Ошибка: Illegal string offset 'class' in?

    TrogWarZ
    @TrogWarZ
    web developer
    Судя по названию функций и переменных, подразумевалось что $atts будет массивом?
    В функцию в качестве $atts приходит строка, а после пытаетесь работать с ней как с массивом – отсюда и предупреждение.
    Найдите место, где вызывается div_container и в качестве первого аргумента передаётся строка – баг там.
    Ответ написан
    Комментировать
  • Как сделать редирект после отправленных заголовков с задержкой?

    TrogWarZ
    @TrogWarZ
    web developer
    Заголовок должен быть отправлен первым.

    Можно добавить к заголовкам задержку:
    header('refresh:5;url=http://www.example.com/newlocation');
    // Весь остальной код – ниже
    Ответ написан
    Комментировать
  • Как правильно сделать проверку в выражении?

    TrogWarZ
    @TrogWarZ
    web developer
    Парсинг html регекспами – зло, имхо.

    Вариант с DOM-парсером (см. мануалы по языку):
    <?php
    
    // Test data
    
    $string1 = '<p>текст</p>';
    $string2 = '<p style="color: #000;">текст</p>';
    $string3 = '<p width="200" height="200" style="color: #000;">текст</p>';
    
    // Working function
    function checkStringParagraphHasNoStyle(string $string = '') : bool
    {
        $doc = new DOMDocument();
        $doc->loadHTML($string);
        $p = $doc->getElementsByTagName('p')->item(0);
    
        // Logic
        if (!$p->hasAttribute('style')) return true;
        $p->removeAttribute('style');
    
        return $p->attributes->length < 1;
    }
    
    // Testing
    
    assert(true === checkStringParagraphHasNoStyle($string1));
    assert(true === checkStringParagraphHasNoStyle($string2));
    assert(false === checkStringParagraphHasNoStyle($string3));
    
    echo 'It Works!' . PHP_EOL;
    Ответ написан
    Комментировать
  • Как разобрать php массив на пары - ключ -> элемент массива, значение -> элемент массива/подмассива?

    TrogWarZ
    @TrogWarZ
    web developer
    Серьёзно? Вопрос о том как работать с массивами в PHP? Сами-то хоть пробовали решить?

    <?php
    
    // Test data
    
    $in = [
        'ID'                              => 7204,
        'IBLOCK_SECTION_ID'               => 142,
        'PROPERTY_VIRTUAL_SECTIONS_VALUE' => [
            296,
            433,
            434,
        ],
    ];
    
    $test = [
        7204 => [
            142,
            296,
            433,
            434,
        ],
    ];
    
    // Working function
    // 
    function flattenConcreteArray (array $arr = []) : array {
        $id     = $arr['ID'];
        $result = [$arr['IBLOCK_SECTION_ID']];
        $result = array_merge($result, $arr['PROPERTY_VIRTUAL_SECTIONS_VALUE']);
    
        return [$id => $result];
    };
    
    // Testing
    
    $out = flattenConcreteArray($in);
    
    assert($out === $test);
    echo 'It Works!' . PHP_EOL;
    Ответ написан
    Комментировать
  • Куда правильнее вынести создание prepared statement?

    TrogWarZ
    @TrogWarZ
    web developer
    Кто и где отвечает за хранение моделей (и в т.ч. за работу с хранилищем) зависит от задачи и используемой идеологии (active record vs data mapper).

    Грубо и кратко: в случае AR проще всего делать это с помощью сервиса прямо в модели, в случае DM в репозитории.
    Но для лучшего понимания хотя бы погуглите эти термины.
    Ответ написан
    Комментировать
  • Конфигурация окружения, тестов и деплоя для Symfony3+vagrant+gitlabci+тесты – как?

    TrogWarZ
    @TrogWarZ Автор вопроса
    web developer
    Начал использовать webdevops/php-docker-boilerplate, есть неочевидные вещи и какие-то мелочи приходится всё ещё менять руками, но, вроде, работает.
    Ответ написан
    Комментировать
  • Нужно ли абстрагироваться от фреймворка?

    TrogWarZ
    @TrogWarZ
    web developer
    Не вижу смысла настолько абстрагироваться ибо вся бизнес-логика хранится в доменных моделях и использует репозиторий для персистентности. Как следствие, при переезде на новый фреймворк доменные модели можно прямо копипастить (иногда даже вместе с юнит-тестами впридачу) – а именно тут и закопана как раз основная работа приложения.
    Конечно, придётся переписать не связанные с бизнесом куски типа роутинга/контроллеров/чего-то-ещё на новые – но ведь ради этих более новых и более удобных кусков и затевается обычно весь переезд.
    Пишу только исходя из личной практики и того что видел.

    То бишь, сначала следует составить максимально подробное описание – ради чего переезд и какой профит он даст кроме ощущения, что "мы пишем на чём-то новом".

    В небольших проектах я наоборот часто сильно завязываюсь на фрейморк (кроме доменных моделей, которые суть POPO) – это позволяет использовать его преимущества на 146% – гораздо эффективнее, чем пилить "свой фреймворк для абстракции над фреймворком".
    Ответ написан
    Комментировать
  • Как вывести числа от 1 до 10 равномерно в 3 колонки?

    TrogWarZ
    @TrogWarZ
    web developer
    Идея: сначала создать двумерную матрицу из последовательности, а затем транспонировать её.

    Ну и примерное решение:
    // Functions
    function matrixFromRange($begin, $end, $cols)
    {
        $matrix = range($begin, $end);
        $result = [];
        $i      = 0;
        $chunk  = ceil(count($matrix) / $cols);
        foreach ($matrix as $el) {
            $result[$i][] = $el;
            if (!($el % $chunk)) $i++;
        }
    
        return $result;
    }
    
    function matrixTranspond(array $matrix = [])
    {
        $result = [];
        foreach ($matrix as $i => $j)
            foreach ($j as $k => $m)
                $result[$k][$i] = $m;
    
        return $result;
    }
    
    function matrixEcho(array $matrix = [], $rowsGlue = ' ', $colsGlue = PHP_EOL)
    {
        foreach ($matrix as $el)
            echo implode($rowsGlue, $el) . $colsGlue;
    }
    
    // Config
    $numBegin     = 1;
    $numEnd       = 25;
    $cols         = 3;
    $joinRowsWith = ' ';
    $joinColsWith = PHP_EOL;
    
    // Testing
    $matrix = matrixFromRange($numBegin, $numEnd, $cols);
    $transponded = matrixTranspond($matrix);
    matrixEcho($transponded);
    Ответ написан
  • Сколько допустимо использовать символов в HTML коде?

    TrogWarZ
    @TrogWarZ
    web developer
    Если я правильно понял задачу, то модальное окно всегда одинаковое – различается только заголовок/контент/футер. Почему бы тогда не иметь код окна всего один, а заполнять его содержимым новости средствами js?
    Ответ написан
    Комментировать
  • Как работать с миграциями Phalcon?

    TrogWarZ
    @TrogWarZ
    web developer
    Я задавался теми же вопросами когда переходил на Фалькон (ещё времена версии 1.1.x). С тех пор перешёл на robmorgan/phinx.
    ps: да, я знаю, что ответ "возьми другое" это не совсем ответ, однако альтернативы с форума не помешают.
    Ответ написан
    Комментировать
  • Как с помощью curl забрать содержимое сайта?

    TrogWarZ
    @TrogWarZ
    web developer
    Смените user-agent:
    curl http://www.flynumber.com -A 'Mozilla/4.0'
    Ответ написан
    1 комментарий
  • Почему при импорте MySQL пишет только одну строку в таблицы?

    TrogWarZ
    @TrogWarZ Автор вопроса
    web developer
    Нашёл проблему и она не в MySQL.

    Сдампил и импортнул в локальную базу – все данные есть.
    Оказалось, что это какой-то специфический баг для SequelPro, который проявился только после обновления на Mac OS на 10.10.1.

    Issue #2048.
    Ответ написан
    Комментировать
  • Какие впечатления от Phalcon по сравнению с Symfony / Yii?

    TrogWarZ
    @TrogWarZ
    web developer
    Переходил с Yii 1 на Phalcon 1.3.x. Сейчас крутится на проде, всё хорошо.

    Нижеописанное – субъективное имхо:
    – Проще понимать, но документация скуднее.
    – Допотопная ORM. После Yii кажется кастрированной, в некоторых случаях она ещё и неоптимально работает с базой by design. Если запилить свой велосипед типа OrmModel, который будет расширять функционал и уменьшать многословность, то более-менее пользоваться можно.
    – Чрезмерно многословная ORM: связи, события, валидация.. да всё. До лаконичности Yii с учётом идеологии Phalcon ей не добраться.
    – Отвратительный нефункциональный CLI (имею ввиду tasks), его даже кастрированным называть – преувеличивать.
    – Удобный встроенный cli для генерации шаблонного кода.
    – Очень удобные и простые конфиги, сервисы, DI, миграции. Архитектурно намного удобнее, чем в Yii.
    – Есть облегчённая версия (Micro) для мелких проектов – на ней писать REST API одно удовольствие.
    – Шустрый шаблонизатор.
    – Удобная работа с кэшерами, есть разделение на front/back кэши, дублирование данных и приоретизация по скорости между ними.
    – Удобно создавать свои расширения или инклудить в проект сторонние.
    – Несмотря на реализацию в виде .so, есть годный официальный автокомплит для IDE.
    – Есть полуофициальный(?) репозиторий удобных расширений – Incubator.

    В целом, впечатления хорошие, не считая ORM. Для прода готов (:
    Ответ написан
    2 комментария
  • Как установить Phalcon + Nginx + PHP-FPM+ база?

    TrogWarZ
    @TrogWarZ
    web developer
    Что мешает сделать всё отдельно?

    Ну, или всё вместе в одном туториале: https://www.digitalocean.com/community/search?quer...

    Если и это окажется сложным, то вам лучше сначала потренироваться в работе с консолью, а только потом уже заниматься подобными вещами.
    Ответ написан
    Комментировать
  • Как хранить app_secret API с oauth в web клиенте (javascript)?

    TrogWarZ
    @TrogWarZ
    web developer
    Здравствуйте, vermus. Нашли ли решение данного вопроса?
    Ответ написан
    2 комментария
  • Оставлять активным рабочий стол при отключении с сохранением разрешения – как?

    TrogWarZ
    @TrogWarZ Автор вопроса
    web developer
    Это можно. На что его заменить?
    Юзкейс: залогиниться, установить разрешение рабочего стола, запустить софт, дисконнектиться и чтобы он не упал из-за отсутствия рабочего стола или другого разрешения.
    Ответ написан