ublaboo/datagrid: мощный, быстрый, расширяемый, красивый, документированный на английском языке datagrid
@Attanon Я переименовал блок chevron-cion (с опечаткой) в
Отредактировано Павлом Яндой (11 марта 2016 г., 8:18)
@sepo Я начинаю выпуск, и он будет в версии 2.4
Редактировать: это в мастере, если вы были нетерпеливы. 🙂
Правка 2: Ну, не v2.4, а v3. Я ожидаю пометить больше функций, около 2 из них содержат возможный BC brejčík.
Отредактировано Павлом Яндой (11 марта 2016 г., 10:05)
Хм, так что я, наконец, проверил его должным образом и использовал его, изменил шаблоны, чтобы они соответствовали шаблону (metronic) и датпикеру, который мы используем, и я обнаружил следующее:
- Есть ли лучший способ изменить шаблоны фильтров, чем создать собственный форк? на самом деле это довольно непрактично
- запоминать фильтры и сортировку в сессии — это здорово, но когда у человека больше датагридов, он неправильно составляет запросы; можно ли каким-то образом задать имя datagrid, которое служило бы «пространством имен» сеанса и, таким образом, у каждого datagrid была бы своя «память»?
- как перейти к столбцу HTML с помощью пользовательского рендеринга?
В остальном отличная работа!
PS: Я бы рекомендовал перечислять зависимости иначе, чем в Bower (достаточно ссылок на библиотеки в README/документации), чтобы можно было без проблем пользоваться датагридом. Хуже всего было найти happy.js. 🙂
Чтобы кто-то опять не искал 2 часа как я https://github.com/…ljanda/happy…
И еще вопрос, почему в этом случае не работает подтверждение:
Отредактировано Bedna (03.11.2016 12:44)
@Bedna Хм, диалоговое окно подтверждения связано с запросами ajax. В следующей версии я расширю его и, возможно, добавлю префикс: data-confirm ⇒ data-datagrid-confirm .
У меня небольшая проблема с привязками, в частности, я использую LeanMapper.
Каксетка источника данных. Я установил LeanMapper\Fluent → DibiFluent.
И я добавляю столбец:
Что говорит мне неопределенная строка в DibiRow. Если есть совет, буду очень признателен, а вдруг я где-то ошибаюсь 🙂 Так же пробовал менять названия столбцов, но безрезультатно… Либо надо создавать ручное объединение, то что я пишу в запросе работает.
Отредактировано majky358 (03.12.2016 0:52)
@majky358 Поскольку официального LeanQuery/LeanMapper QueryObject не существует, при использовании LeanMapper вы вообще не будете использовать LeanMapper в сетке данных (если вы не реализуете свой собственный источник данных). Таким образом, вы используете только Dibi\Fluent (== DibiFluent) для сетки данных. Можете ли вы показать мне, как вы создаете fluent-запрос?
Я пробовал использовать LeanMapper\Repository->createFluent()…
Отредактировано majky358 (03.12.2016 17:15)
@majky358 Хорошо? 🙂
Да, первый запрос не может работать, если в нем нет необходимой таблицы соединения..
Сейчас я имею дело с чем-то похожим. Я использую объект LeanMapper в качестве источника данных. Дисплей хорошо работает даже с внешними ключами. Однако проблема возникает, если я хочу отсортировать по какому-то столбцу:
Предусмотрена ли более широкая поддержка сущностей или мне нужно использовать DibiFluent? У меня с этим все работает, но опять же, ORM для меня не имеет смысла.
@Arty Хммм. Что ж, я еще не подумал о том, чтобы поместить LeanMapper\Entity в поле и указать его в качестве источника данных для сетки данных.
Здесь проблема несколько философская.
Для надлежащей поддержки LeanMapper\Entities необходима оболочка вокруг DibiFluent. Как и в доктрине QueryBuilder. К сожалению, на LeanQuery закашлялся тарос (наверное не хватило времени). Потом где-то была попытка LeanMapper\QueryObject, но это неофициально, и я тоже не знаю, как там с разработкой.
Моя позиция по этому вопросу: Поскольку где-то здесь было написано, что tharos не до этоговремя, а также то, что tharos передал разработку @castamir , лучше всего пропинговать его. Я не считаю LeanMapper мертвым.
В проектах, где я работаю с LeanMapper, я использую Dibi\Fluent в качестве источника данных.
@Arty Вероятно, самое быстрое решение с моей стороны — добавить доступ к свойствам (для ORM) в ArrayDataSource. Я помещу это в выпуск.
Конечно, спасибо за ответ. У меня пока нет проблем с использованием DibiFluent, просто стыдно 🙂
В остальном Grid очень хорош, и я его фанат!
Здравствуйте,
Я хотел спросить, как настроить правильное отображение диакритических знаков в экспортированных файлах CSV?
@Dark0ne 🙂 Отображается «правильно». Если вы хотите изменить выходную кодировку, например, на windows-1250, пожалуйста, откройте тикет на github, я добавлю туда опцию. (На данный момент невозможно изменить кодировку, переданную в конструкторе класса CsvResponse)
Отредактировал Павел Янда (14/03/2016 17:20)
Здравствуйте,
У меня есть еще вопрос :о).
Мне нужно сделать такой листинг, чтобы можно было различать две категории записей с первого взгляда.
Вот как выглядит элемент, который отличает заданные столбцы. Итак, есть две категории «Доходы» и «Расходы». В идеале я хотел бы покрасить все строки данной таблицы другим цветом (или только ячейкой).
Проще говоря, например, строка выписки «Доход» должна иметь зеленый цвет фона, а строка типа «Расходы» должна быть, например, красным. Надеюсь понятно. Я попытался немного поколдовать с переменной в setClass, но она не поддерживается в addColumnText.
Спасибо за любой совет 🙂
@Dark0ne Для строки вы можете использовать обратный вызов и установить класс в соответствии с $item (все
@PavelJanda Можно ли изменить групповые действия на основе ввода? Например, я хочу изменить цену на определенную цену для всех отмеченныхзначение.?
@Attanon Я думал об этом, но пока не нуждался. Если будете использовать, добавлю в v3.1, например. Может быть, 3, посмотрим.
@Attanon Я думал об этом, но пока не нуждался. Если будете использовать, добавлю в v3.1, например. Может быть, 3, посмотрим.
Я обязательно буду использовать его. Но примите это как апгрейд, что было бы круто, но не важно, учитывая, что я первый, кто его просит. Когда будет время, постараюсь посмотреть и сделать пиар.
Объект запроса для LeanMapper существует уже давно, см. его ответвление
Я намерен интегрировать его непосредственно в LeanMapper, потому что я думаю, что он должен быть там. Кстати, интеграция может быть похожа на другие расширения LeanMapper, которые у меня есть
@castamir Когда вы его интегрируете (в какую-нибудь стабильную версию), я напишу источник данных для объекта запроса. Доступ к свойствам сущности LeanMapper уже готов в классе Row .
.
Отредактировал Павел Янда (15/03/2016 22:47)
Привет, я столкнулся с другим, когда у меня есть вопрос: (DibiFluent)
Я хочу фильтровать по идентификатору stlpcom (user.id)
Будет проблема: столбец ‘id’ в предложении where неоднозначен, вероятно, это можно решить с помощью пользовательского фильтра where… как-то более элегантно? Я хотел бы сохранить .* Спасибо, у меня есть таблицы xxx, поэтому я ищу какое-нибудь решение 🙂
@majky358 Взгляните на документ, вы можете указать дополнительные параметры для методов DataGrid::addColumnX() и DataGrid::addFilterX(). Среди прочего укажите имя столбца: $grid->addFilterText(«id», «User_ID», ‘user.id’); . Вы можете предоставить текстовому фильтру еще больше столбцов для поиска: $grid->addFilterText(«id», «User_ID», [‘user.id’, ‘user.address’, ‘user.name’]); .
Отредактировано Павлом Яндой (17 марта 2016 г., 7:46)
Новая версия — v3.0.0
Через некоторое время пришел еще одинверсия со значительной порцией новых опций!
Внимание для тех, кто использует Nette\Database: в отдельной ветке есть информация о источнике данных, который умеет парсить нативные sql запросы. Таким образом, никому больше не нужно извлекать все данные из базы данных, когда им нужен более сложный запрос!
- Добавлено большое встроенное редактирование (документация с образцом, демо выше)
- При скрытии столбцов теперь отображается интерактивный обзор отображаемых/скрытых столбцов (демонстрация)
- Добавлен удобный интерфейс для назначения фильтров столбцам (как вы знаете из других сеток — $grid->addColumn()->setFilter() , документация)
- Добавлены значки календаря для фильтров, отображаемых в таблице
- Возможно сбросить страницу при изменении сортировки ( DataGrid::setSortableResetPagination() )
- Удалена некоторая магия (вы больше не можете вызывать Column::icon() , а только setIcon() , аналогично для класса, заголовка и ниже – возможен разрыв BC)
- Другие мелочи/исправления
Спасибо всем за идеи и сотрудничество!
Отредактировано Павлом Яндой (17/03/2016 11:28)
Я хвалю версию 3, большой встроенный редактор великолепен 🙂
У меня только одна проблема. После обновления у меня не работают фильтры, а только у некоторых сеток. Не могу понять, в чем может быть проблема?
@sibka Меня это поражает. Это происходит и с вами на сайте ublaboo? Попробуйте удалить весь кеш и сеанс браузера (куки, активы) и приложение. Попробуйте примерно описать мне, сколько и каких сеток у вас на странице. Попробую смоделировать такую ситуацию.
datagrid выглядит красиво, и я думаю, что начну использовать его вместо самостоятельно разработанной сетки. Но у меня вопрос, мы все таблицы тянем через API, поэтому БД нет. Для этого подойдет источник данных Array. Но поскольку в некоторых таблицах тысячи строк, API может фильтровать результаты. Должнот.е. назначить какой-нибудь callback на datagrid (который бы принимал фильтры, перфораторы) через который бы заполнялся источник массива данных?
Спасибо за информацию, если получится, попробую сетку
@Blujacker Конечно, есть интерфейс IDataSrouce, который вы реализуете в своем классе, который будет общаться с вашим API. Чтобы изложить идею:
Затем вы передаете источник данных в сетку данных:
Отредактировал Павел Янда (18/03/2016 15:36)
@Blujacker Наверное, это самый чистый способ. Его легко можно было бы обойти разными способами, но я бы так делать не стал.
И, конечно же, фильтры могут иметь собственные обратные вызовы.
PS: Идея тянуть вещи через API мне вполне понравилась, напишу какой-нибудь ApiDataSource — выложу в issue. 😀
Отредактировал Павел Янда (18/03/2016 15:39)
@Blujacker Наверное, это самый чистый способ. Его легко можно было бы обойти разными способами, но я бы так делать не стал.
И, конечно же, фильтры могут иметь собственные обратные вызовы.
PS: Идея тянуть вещи через API мне вполне понравилась, напишу какой-нибудь ApiDataSource — выложу в issue. 😀
Здравствуйте, как мне переписать диалоговое окно подтверждения, пожалуйста? вместо этого добавьте атрибуты
к ссылке на метку данных.
@zoool
1, я переместил имя этого атрибута данных datagrid-confirm в статическую переменную. Так что вы можете изменить его: Action::$data_confirm_attribute_name = ‘my-confirm’ .
2, метод ::setDataAttribute() доступен в классе Action. Или вы имели ввиду другую ссылку? Например, ColumnLink?
@Dark0ne Я отметил версию, в которой можно установить кодировку экспорта CSV, а также разделитель. Теперь этого можно легко добиться с помощью дополнительных параметров метода DataGrid::addExportCsv[Filtered]() :
Отредактировано Павлом Яндой (19 марта 2016 г., 8:46)
Здравствуйте,
Сейчас я решаю проблему, связанную с тем, что у меня установлено значение columnDatetime.рендерер, который берет дату и добавляет к ней X дней в зависимости от того, насколько действителен элемент. (Например, элемент был создан 01.01.2016, он действителен в течение 10 дней ⇒ 01.11.2016 отображается в таблице данных.) Но если я попытаюсь использовать filterDate, он фильтрует по дате создания, потому что это значение, которое находится в источнике данных. Есть ли способ сделать это, кроме как изменить дату в источнике данных?
Спасибо
@PavelJanda
Большое спасибо, этого достаточно, и setDataAtributte работает. Еще хотел спросить, можно ли эти параметры задавать глобально? Какое-то статическое поле с такими параметрами или я хотел спросить, как вы это решаете. Спасибо
@zoool Если вам нужны определенные атрибуты данных для всех столбцов определенного типа (или всех типов), вероятно, лучше всего наследовать от DataGrid и переопределить методы ::addColumn*(). В них вы устанавливаете свои атрибуты данных и вызываете parent::addColumn*() . Затем вы будете использовать свою сетку данных на фабриках.
@Vastlik Это зависит от логики вопроса. На ум приходят две возможности:
1, Уже в запросе базы данных можно, например, отправить уже отредактированную дату (DATE_ADD) в mysql. Это, наверное, лучшее решение, но я говорю, что это зависит от сути сообщения.
2. Вы пишете свое собственное условие фильтрации ( ::addFilterDate()->setCondition(function($fluent, $value) <. >)).
Отредактировано Павлом Яндой (19.03.2016, 17:33)
@PavelJanda Итак, я понял, почему фильтры не работают с некоторыми сетками после обновления до 3.0. Если я использую поле даты для фильтрации, это дает мне ошибку «[SQL Server]DATE не является известным именем предопределенной функции элемента». У меня есть база данных на MS SQL Server 2014.