Задать вопрос
  • Как из строки с путём получить элемент массива?

    <?php
    $string = "k1/k2/k3";
    $arr = [
    	'k1' => [
    		'k2' => [
    			'k3' => [
    				'k4' => 'v'
    				]
    			]
    		]
    ];
    
    $code = 'return $arr["'.str_replace('/', '"]["', $string).'"];';
    $result = eval($code);
    var_dump( $result );

    Конечно, eval() - зло. Но это зло ещё живое!
    Ответ написан
    6 комментариев
  • Каким образом можно получить свойства элементов инфоблока не используя getList?

    есть GetPropertyValues и GetPropertyValuesArray()

    Но вот быстрее ли оно...
    Могу лишь сказать, что Fetch() будет быстрее GetNext(), так что предпочтительнее использовать Fetch()
    Ответ написан
    Комментировать
  • Почему я получаю редирект на главную с любой детальной страницы?

    1. Находите в ядре функцию LocalRedirect
    2. Вставляете в неё первыми строчками вывод трассировки (debug_backtrace() ) и die;
    3. Если сработало - увидите, откуда был вызван редирект. Если не сработало - ищите другие варианты редиректа ( даже в .htaccess может быть какая-нибудь дичь )
    Ответ написан
  • Почему скрипт не работает через systemctl?

    Возможно, файл юнита слишком куцый, и с правами на файлы что-то не то?
    Вот такой вариант у меня сработал:
    test.sh:
    #!/bin/bash
    
    while true; do
        date +%Y-%m-%d_%H:%M:%S >> /home/myuser/test.log
        sleep 20
    done

    Юнит:
    [Unit]
    Description=kaBOOM
    After=network.target
    StartLimitIntervalSec=1
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=5
    User=myuser
    ExecStart=/home/myuser/test.sh
    
    [Install]
    WantedBy=multi-user.target


    Обратите внимание, что пишу я в файл в своём домашнем каталоге и запускаю от своего пользователя.
    И никаких проблем с тем, что это баш скрипт, не было.
    Ответ написан
    Комментировать
  • Как можно понять как хакер изменяет файл и как имеет доступ?

    самое простое - посмотреть на время изменения файла, затем по логам веб-сервера проверить, что происходило в это время или раньше.
    проверить crontab.
    Ещё можно использовать inotify
    Ответ написан
    Комментировать
  • Как правильно написать RewriteRule?

    Вы слишком мудрите
    RewriteRule ^goods(/.+) /catalog/tovary$1 [L,R=301]
    Ответ написан
  • Есть что то проще чем php?

    Если без динамики, то Pug - отличный шаблонизатор
    Ответ написан
    Комментировать
  • Как выполнить поиск данных, если в базе данных указан шаблон?

    хранится он в виде W1K253???1???????, W1N253???1???????

    Насколько я вижу, эти шаблоны одинаковы, то есть:
    1. 6 фиксированных символов
    2. 3 произвольных символа
    3. 1 фиксированный символ
    4. 7 произвольных символов

    При этом произвольные символы обозначены знаком "?".
    Тогда можно сделать такой регуляркой:
    <?php
    $requestedVin = 'W1K25312311234567';
    $pattern = preg_replace('/^([A-Z\d]{6})[A-Z\d]{3}([A-Z\d])[A-Z\d]{7}$/', '$1???$2???????', $requestedVin);
    
    $query = "
            SELECT DISTINCT p.ID
            FROM {$wpdb->posts} p
            INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
            WHERE p.post_type = 'product'
              AND p.post_status = 'publish'
              AND pm.meta_key = 'vin'
              AND pm.meta_value = %s
            LIMIT 10 OFFSET %d
        ";
    
    $results = $wpdb->get_col($wpdb->prepare($query, $pattern, $offset));
    Ответ написан
    Комментировать
  • Как решить проблему сохранения данных?

    ichug, вообще не понимаю, почему Вы акцентируетесь на том, что существует коробочная версия. Такое ощущение, что Вы плохо представляете, как устроен Битрикс. Смотрите:
    1) есть облачный Битрикс24. Туда можно устанавливать "приложения", которые могут взаимодействовать со сторонними хостами через REST API
    2) есть коробочный "Битрикс: корпоративный портал". Туда ровно так же ставятся те же самые приложения.

    Если Вы рассматриваете ситуацию, когда коробочный корпортал стоит в закрытом контуре, изолирован от интернета, то в таких случаях Вам придётся договариваться с заказчиком об установке дополнительного сервера с Вашим ПО внутрь контура. Другого пути я не вижу. И тогда коробочный корпортал точно так же будет подключаться к этому доп.серверу.

    У меня нет реальных данных, но предполагаю, что подобных заказчиков - очень мало. Уверен, что большинство покупателей коробочного корпортала берут его не для полной изоляции от внешнего мира, а для кастомизации
    Ответ написан
  • Как вывести детальную новость?

    я правильно понял, что под каждую категорию у Вас отдельный инфоблок? Если это так, то одним файлом не обойтись.

    Если начальная задача была "Сделать новости с категориями", то для этого обычно:
    1) берут тип инфоблока с флагом "Использовать древовидный классификатор элементов по разделам". Если такого типа нет - заводят новый.
    2) создают один инфоблок
    3) в этом инфоблоки создают разделы ( категории ) и элементы ( сами новости )
    4) в публичной части создают отдельный каталог ( например, /news ) и в /news/index.php добавляют комплексный компонент bitrix:news

    Да и вообще, если у Вас есть и список новостей и просмотр новости детально, то нет смысла делать отдельные файлы с "bitrix:news.list" и "bitrix:news.detail". Нужно использовать bitrix:news
    Ответ написан
    2 комментария
  • Как настроить описание страницы?

    посмотрите в корне сайта файл .section.php
    Ответ написан
    Комментировать
  • Как сформировать список по вложенному массиву рекурсивной функцией?

    извращение с мухлежом:
    <?php
    function list_form(array $items):string
    {
         function inner(array $items):string {
            $result = '';
            foreach ($items as $key => $val) {
                if (is_array($val) ) {
                    $result .= "<li>$key =></li>";
    
                    if (!empty($val)) {
                        $result .= inner($val);
                    }
                } else {
                    $result .= "<li>$key => $val</li>";
                }
            }
            return $result;
        }
    
        return '<ul>'.inner($items).'</ul>';
    }
    echo list_form($arr);
    Ответ написан
    Комментировать
  • Что неправильного в моем коде?

    Как минимум, Вы не вникли в задачу. Я вот в футболе практически не разбираюсь - получив такое задание, я пошёл бы в гугл узнавать, как проводятся матчи в турнирах, когда команда играет на своём поле, а когда - нет. Даже по своим скудным знаниям могу кое-что предположить:
    1) Первый круг: команды надо разбить на пары случайным образом. Это shuffle() + array_chunk() . У Вас этого нет.
    1.1) Учесть ситуацию, когда команд - нечётное количество. Этого тоже нет.
    2) в парах какую-то команду назначить хозяином. Соответственно, в выводе в колонке "Хозяева" должно быть не повторение "Хозяева", "Хозяева", "Хозяева", а имена команд
    3) дальше надо смотреть, на каких условиях проводится второй круг, кто в него попадает, на своём поле играют или на чужом..

    Получается, из этого:
    загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список
    Вы выполнили только "загружать через форму файл json", причём зачем-то этот файл сохраняете на диск, а потом немедленно читаете обратно.

    Сергей Вам справедливо указал на "разделение обязанностей", то бишь первую букву в SOLID - Single Responsibility Principle. Даже если оставить на месте выверт с сохранением на диск, получается:
    1. Repository - хранилище данных
    2. метод контроллера, отвечающий за приём данных именно в виде сабмита формы и сохранение их Repository
    3. Генератор текущего круга
    4. View, который отвечает за генерацию html-разметки круга,
    5. метод контроллера, который может извлечь данные из Repository, скормить их генератору, получить результат и скормить его во View.


    И не факт, что методы из 2 и 5 пункта принадлежат одному классу.
    Ответ написан
    Комментировать
  • Для чего нужен wakeUp в Битрикс?

    если посмотреть код, то видно, что при wakeUp не выполняется никаких обращений к БД.
    Метод в файле bitrix/modules/main/lib/orm/objectify/entityobject.php
    смотрите разницу:
    fill*() - подгружает значение из БД
    set*() - задаёт значение свойства, но при несовпадении со старым значением переводит объект в состояние State::CHANGED
    wakeUp() -создаёт объект с указанными значениями свойств, не переводя объект в изменённое состояние, но только при условии, что в аргументе есть первичный ключ.
    Ответ написан
    Комментировать
  • Вставка изображений в png шаблон по параметрам Wordpress?

    Что-то вроде водяного знака, но только наоборот?

    Почему наоборот? Ровно так же, если я правильно Вас понял.
    Для водяного знака:
    1) берётся исходное изображение,
    2) берётся изображение с водяным знаком,
    3) второе накладывается поверх первого,
    4) результат сохраняется

    В вашем случае:
    0) пользователи отсылают форму с файлом фотографии и какими-то текстовыми полями (например, ФИО)
    1) берётся изображение-шаблон пустого бейджа,
    2) берётся изображение из присланной формы,
    3) второе накладывается поверх первого,
    4) также поверх пишется текст из текстовых полей,
    5) результат сохраняется.

    Это можно сделать средствами GD.
    Ответ написан
    Комментировать
  • Как настроить ошибку 404 не выводится ошибка в headers?

    Нет, достаточно допилить шаблон компонента каталога. Сейчас, полагаю, на неправильный URL открывается корень каталога? Если так, то достаточно в странице sections.php добавить свой код
    Ответ написан
  • Как почистить базу sql?

    С учётом:
    Честно, с SQL не работаю и не понимаю. Или только ждать тех.поддержку?

    ждать техподдержку - самое разумное решение. Любое вмешательство приведёт к тому, что ответственность за состояние системы полностью перейдёт на Вас. Может, там что-то уже повреждено, а Вы без понятия.
    Ответ написан
    Комментировать
  • Как убрать знак / в всех ссылках в тексте?

    <?php
    $content = preg_replace('#(href=['"][^'"]*)/(?='|")#', '$1', $content);

    Только с относительной ссылкой на главную ( href="/" ) будет проблема
    Ответ написан
    1 комментарий
  • Почему нет свойства в $arResult?

    потому что в аргументах CIBlockElement::GetList() надо указывать не 'PROPERTY_JOB_TITLE_VALUE' , а 'PROPERTY_JOB_TITLE'. А вот в результате будет 'PROPERTY_JOB_TITLE_VALUE' и ещё пачка мусора
    Ответ написан