• Как спроектировать базу данных для мультиязычного сайта?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Другие варианты есть.

    1) Переводы хранить в поле типа json. То есть будет одно поле name на таблицу. Дополнительные таблицы не нужны. Только не советую в шаблонах выводить данные из поля напрямую, что-то типа $name->ru. Лучше написать хелпер и выводить через него (или трейт для модели). В нем же тогда можно использовать замену из языка по умолчанию если для используемого сейчас языка нет перевода. Будет что-то типа t($name, 'ru')

    2) Из основной таблицы убираем все поля для которых нужны переводы в отдельную таблицу переводов для этой таблицы. У нее следующая структура. id, field_name, lang_name( или id), value. Придется писать много кода для реализации удобного сохранение/чтения используя текущую работу с моделями (или как они там в yii2 называются).

    По мне лучше первый вариант.
    Ответ написан
    Комментировать
  • Как правильно сформировать фильтр запроса по odata?

    @Dementor
    программист, архитектор, аналитик
    Оператора in в принципе нет в 1С.
    Для OData так же как и для обычного 1С-кодирования нужно выкручиваться через поиск подстроки:

    bool substringof(string searchString, string searchInString)

    Сначала вы со всех своих кодов формируете единую строку через уникальный разделитель (которого точно нет в кодах), а потом накладываете одно единое условие на вхождение кода в эту строку условия.
    Ответ написан
    1 комментарий
  • Почему игнорируется параметр quality в imagewebp(), GD PHP?

    Compolomus
    @Compolomus Куратор тега PHP
    Комполом-быдлокодер
    if (isset($_FILES['file']['tmp_name'])) {
        $image = imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name']));
        $name = time() . '_' . substr($_FILES['file']['name'], 0, -4);
        imagejpeg($image, './img/' . $name . '.jpg');
        for (
            $initialQuantity = 50, $targetFileSize = 32 * 1024, $size = 2 * 1024 * 1024;
            $targetFileSize < $size && $initialQuantity >= 10;
            $initialQuantity -= 5
        ) {
            ob_start();
            imagewebp($image, null, $initialQuantity);
            $image_data = ob_get_clean();
            $size = strlen($image_data);
        }
        imagewebp($image, './img/mini/' . $name . '.webp', $initialQuantity);
    }

    так как условие двойное, скорее всего раньше упреться в качество 10
    Ответ написан
    1 комментарий
  • Почему игнорируется параметр quality в imagewebp(), GD PHP?

    radhab20
    @radhab20
    Мир вам!
    Привет. Использую этот класс (не реклама), пока всё устраивает
    Ответ написан
    4 комментария
  • Как корректно обработать строку запроса типа catalog/aloe/aaaa, если третий параметр в роутинге не предусмотрен (только /)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Разбиваю строку на массив, из первого параметра получаю имя контроллера и создаю соответствующий экземпляр. Если нет второго параметра, вызываю действие по умолчанию: на сайте это отобразить каталог, или страницу со сатьями (uri соответственно mysite.com/catalog или mysite.com/articles). Если же есть второй параметр (это название конкретного растения или id статьи), вызываю другое действие и передаю параметр (получается mysite.com/catalog/aloe)
    то что вы реализовали к роутингу имеет такое себе отношение. Роутинг обычно опирается на правила, а увас тупо захардкорен контроллер. Что будете делать если сложность будет чуть выше, и например, добавится язык перед контроллером?

    При запросе вида mysite.com/catalog/aloe/test, т.е. когда через слеш появляется третий параметр, та же страница с уведомлением для пользователя отображается без стилей
    Логично, стили у вас лежат всегда в одной папке, а вы их каждый раз подключаете из разных "путей" в урл, от которых зачем-то высчитываете сколько папок "выше отмотать". Путь должен быть абсолютным.

    Вот логика проверки, буквально, если в массиве получилось больше двух элементов, отобрази страницу ошибки
    Вообще логика должна быть такой, что если больше 2 параметров, то все что дальше помещается в какой-то массив, например $parameters, который можно получить из роутинга, и дальше в зависимости от значений что-то делать. Правильнее все же было бы сделать сопоставление пути с контроллером, экшеном и параметрами, как во взрослых роутерах, но для начала и так сойдет.
    Ответ написан
    1 комментарий
  • Как корректно обработать строку запроса типа catalog/aloe/aaaa, если третий параметр в роутинге не предусмотрен (только /)?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "отображается без стилей" потому что надо всегда использовать абсолютные пути, а не относительные.
    Хотя странно, в этом случае должно косячить либо с одним параметром в урл, либо с двумя.
    Но абсолютные пути от корня сайта вместо всех этих точечек в HTML надо в любом случае прописать. Почитать что это такое можно здесь https://phpfaq.ru/newbie/paths
    Ответ написан
    1 комментарий