Создать и скачать CSV на PHP
Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.
На днях передо мной стала задача отсортировать выдачу продуктов по таблице, которая не описана в schema.xml. Приведу краткий пример схемы таблицы и структуры таблицы с позициями, по которой мне следовало отсортировать товары.
Упрощенная таблица товаров (объединил таблицу переводов с основной и урезал поля):
id | (int) | id товара |
name | (string) | Имя |
create_date | (int) | Дата |
Схема этой таблицы (schema.xml):
<table name="shop_products" phpName="SProducts">
<vendor type="mysql">
<parameter name="Charset" value="utf8"/>
</vendor>
<column name="id" type="INTEGER" required="true" autoIncrement="true" primaryKey="true"/>
<column name="name" type="varchar" size="500" required="true"/>
<column name="create_date" type="INTEGER"/>
</table>
Дорпустим у нас есть привязка товаров к статьям, и у каждой статьи может встречаться один и тот же товар и у каждого товара может быть своя позиция в каждой статье.
Приведу пример таблицы статей и связи товаров (назовем таблицу link_page):
page_id | (int) | Id статьи (приведено для примера) |
product_id | (int) | Id товара со схемы SProducts |
position | (int) | Позиция в которой товар есть в статье |
Вот есть позиция у каждого товара в статье, но в таблице товара нет связки, чтобы сделать join пропелом. По этому начинаем делать вот так:
SProductsQuery::create()
->addJoin('shop_products.id' , 'link_page.product_id', Criteria::INNER_JOIN)
->addAsColumn('position', 'link_page.position')
->where('page_link_product.page_id = ' . 'ID страницы товара')
->orderBy('position','ASC')
->find();
В моем случае полный путь к Criteria::INNER_JOIN является \Propel\Runtime\ActiveQuery\Criteria::INNER_JOIN.
SProductsQuery - сгенерированная модель по схеме, упрощенная для понимания и описанная выше.
Данный запрос даст возможность подключить не объявленную в моделях таблица в пропел запрос, чтобы не делать костылей и велосипедов для сортировки.
Пробуйте, разбирайтесь, в моем случае addJoin() позволил сэкономить время переписи и перегенерации схемы под нужды, тем самым не сильно отягощая страницу статьи, на которой присутствуют товары.
Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.
Последние шаблоны от ImageCMS 4.12, для скачивания нужна авторизация.
Рассмотрим варианты популярные варианты хранения товаров в корзине в интернет-магазине. Обозначим плюсы и минусы таких хранений. Рассмотрим варианты долгосрочного хранения корзины.
Создание ключа для imageCMS 4.9-4.12.1 Pro и Pre. Для получения следует авторизироваться.
При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.
После разработки какого-либо инструмента на PHP, становится вопрос, насколько созданный код ресурсный и какие элементы он затрагивает еще. Рассмотрим установку xhprof, настройку и рассмотрим способы работы с xhprof.
Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().
Столкнулся с проблемой авторизации 1с на сайте. Сервер почему то не принимал от нее параметр PHP_AUTH_USER и PHP_AUTH_PW. Рассмотрим подробнее решение и обход данных параметров в $_SERVER .