• Как изменить вид ссылки через htaccess?

    gscraft
    @gscraft
    Программист, философ
    Вам нужна эта документация по .htaccess, а именно:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f # убедитесь, что это не реальный файл
    RewriteRule ^([a-z]+)\.gif$ file.php?user=$1 # если совпадет регулярное выражение, перенаправляет запрос на file.php


    Но лучше решить это средствами PHP, библиотекой маршрутизации или микрофреймворком, поскольку настраивать .htaccess на каждую задачу веб-приложения будет некорректно (и осложнит смену сервера).
    Ответ написан
  • Как сконструировать правильный запрос для выборки всех атрибутов товара?

    gscraft
    @gscraft
    Программист, философ
    Тут надо понимать, что Вы пытаетесь выбрать 1 строку с product_id с выборкой по двум строкам. В одной строке, разумеется, не будет значений "тип изделия" и "форма изделия". Следовательно, в одном запросе и с выборкой по одной строке это не решается, по крайней мере "в лоб".

    свести выборку по нескольким строкам к одной можно несколькими способами. Навскидку,
    SELECT product_id FROM atribute_product WHERE
    product_id IN (SELECT product_id FROM product_attribute WHERE attribute_id = 1 AND value IN ("Классическое", "Спортивное") AND
    product_id IN (SELECT product_id FROM product_attribute WHERE attribute_id = 2 AND (value = ... OR value = ...))

    Или, используя несколько INNER JOIN. Наверняка есть различные оптимизации этих подходов. Например, суб-запрос можно попробовать свести к одному, где, полагаю, получится выбрать количество строк COUNT(product_id) AS cnt и собственно product_id и проверить HAVING cnt = 3 (что может быть осложнено комбинациями и/или).

    PS Возможно получится схитрить, избежать вложенные запросы с оператором CASE, группировкой по product_id и опять-таки с проверкой на количество условий:
    SELECT product_id, COUNT(product_id) as cnt
    WHERE ... CASE WHEN attribute_id = 1 THEN value = "Классическое" WHEN attribute_id = 2 THEN value LIKE "Кругл%" ELSE 0 END ...
    GROUP BY product_id
    HAVING cnt = 2

    Увы, нет возможности попробовать-поизучать разные варианты для ответа на вопрос.

    Однако, первый пример с группой вложенных запросов должен работать.
    Ответ написан
    7 комментариев
  • Почему файл не отправляется php?

    gscraft
    @gscraft
    Программист, философ
    Причин может быть несколько, от неработающей в силу настроек хостинга mail(...), до ошибки в заголовках или в теле запроса, при этом Вы не приводите ошибки, и нет возможности воспроизвести Ваш опыт в целом. Проще всего избежать ошибки, и это правильный путь, воспользоваться одной из библиотек, как автоматизирующей построение тела/заголовков запроса, так и позволяющей работать с SMTP напрямую. Посмотрите на packagist.org , например, пакеты nette/mail , zendframework/zend-mail , swiftmailer/swiftmailer . Если не работали с composer, непременно стоит с ним разобраться: getcomposer.org
    Ответ написан
    Комментировать
  • Как обработать XML в качестве шаблона?

    gscraft
    @gscraft
    Программист, философ
    Как следует из комментариев, задача отображать множественные формы. Источник форм не столько важен: создают их вручную, с инструментарием или они генерируются автоматически. Решить динамической загрузкой в Angular будет сложно (а тем более связать в MV*, обрабатывая в контроллере/модели компонента), следовательно, напрашивается другой подход к визуализации форм средствами статически-собранного приложения. Попробуйте решить это посредством мета-данных форм. Пусть форма будет представлена описанием полей, скажем, JSON или XML, и единый (и сложный) шаблон Angular будет заниматься генерацией, грубо говоря, что-то вроде этого:
    formElementsList = [ { type: "text", label: "Поле ввода", value: null } ];

    <div *ngFor="let element of formElementsList">
      <div *ngIf="element.type == 'text'">
        <label>{{ element.label }}:
          <input [(ngModel)]="element.value" />
        </label>
      </div>
    </div>

    Ограничений у этого подхода нет, можно создать форму любой сложности, с иерархией и вложенностью.
    Ответ написан
  • Как в angular 7 использовать api yandex maps?

    gscraft
    @gscraft
    Программист, философ
    Трудно дать подсказку, если нет деталей проблемы. Как подключали, какие ошибки получали. Можно предположить, что код инициализации выполняется раньше, чем подгружается Yandex API. Один из способов гарантировать своевременную инициализацию карты, сделать это вручную, например, после загрузки API: https://medium.com/better-programming/angular-load...
    Ответ написан
    Комментировать
  • Yii2. Кастомная таблица. Использовать ли GridView?

    gscraft
    @gscraft
    Программист, философ
    Сложно понять задачу в общем и целом, однако. Имеет ли смысл работать с GridView? Это довольно гибкий механизм, реализовать можно если не всё, то многое, причем, не прибегая к внешним библиотекам и в экосистеме Yii2. Так, например, решением "в лоб", можно определить свои модели с данными и для фильтрации, наследуя от yii\base\Model , передав виджету ArrayDataProvider и кастомные поля в columns с "отлавливанием" группирующих моделей. Посмотрите, что можно настроить https://www.yiiframework.com/doc/api/2.0/yii-grid-... и документацию yii\grid\DataColumn, вы можете определять практически все, вплоть до HTML-атрибутов таблицы. Конечно, есть и более гибкие библиотеки для работы с таблицами, особенно на JavaScript, но в Вашем случае, похоже, весомая доля работы ложится на контроллер, где попутно можно сформировать и колонки для таблицы, пользуясь инструментарием Yii2.
    Ответ написан
    Комментировать
  • Как убрать повторное изображение?

    gscraft
    @gscraft
    Программист, философ
    В коде попросту дважды ссылка на одно и тоже изображение, на самой картинке и на заголовке "Фото галерея", подпадающая под фильтр движка: $("a[rel^='prettyPhoto']") , prettyPhoto подбирает в галерею все изображения по данному критерию. Либо задайте иное изображение на заголовке, либо уберите rel="prettyPhoto[images]" , вручную открыв галерею ($.prettyPhoto.open , полагаю).
    Ответ написан
    Комментировать