php 数据网格,8.如何添加后台数据网格

本章节讨论Magento 2后台数据网格。如你所知Magento 2 网格是一种数据表格,用来显示数据库中对应表的数据,并提供了排序、筛选、删除、更新数据的功能。示例网格可以查看后台产品列表和用户列表。

Magento 2 提供了两种创建网格的方式:使用布局文件和使用组件(component)。接下来会讨论他们的实现细节。在此之前请确保已经创建了前几章节的简单模块,并添加了后台菜单和路由文件,这些在本节都会用到。

创建管理网格步骤如下:

1 创建数据表

2 创建后台路由

3 添加后台导航菜单项

4 添加控制器

5 使用组件创建网格

6 使用布局文件创建网格

第一步 创建数据表

编辑安装配置文件 app/code/Aqrun/HelloWorld/Setup/InstallSchema.php

这个文件只会运行一次在模块安装时。创建数据表的代码:

namespace Aqrun\HelloWorld\Setup;

use Magento\Framework\DB\Ddl\Table as T;

class InstallSchema implements \Magento\Framework\Setup\InstallSchemaInsterface

{

private $_postTable = 'aqrun_helloworld_post';

public function install(

\Magento\Framework\Setup\SchemaSetupInterface $setup,

\Magento\Framework\Setup\ModuleContextInterface $context

){

$installer = $setup;

$installer->startSetup();

if(!$installer->tableExists($this->_postTable)){

$this->createTable($installer);

}

$installer->endSetup();

}

protected function createPostTable($installer)

{

$table = $installer->getConnection()->newTable(

$installer->getTable($this->_postTable)

)->addColumn(

'post_id', T::TYPE_INTEGER, null,

['identity'=>true, 'nullable' => false, 'primary' => true, 'unsigned' => true],

'Post ID'

)->addColumn('name', T::TYPE_TEXT, 255, ['nullable' => false], 'Post Name')

->addColumn('url_key', T::TYPE_TEXT, 255, [], 'Post URL Key')

->addColumn('post_content', T::TYPE_TEXT, '64k', [], 'Post Post Content')

->addColumn('tags', T::TYPE_TEXT, 255, [], 'Post Tags')

->addColumn('status', T::TYPE_INTEGER, 1, [], 'Post status')

->addColumn('featured_image', T::TYPE_TEXT, 255, [], 'Post Featured Image')

->addColumn('created_at', T::TYPE_TIMESTAMP, null,

['nullable' => false, 'default' => T::TIMESTAMP_INI],

'Created At'

)->addColumn('updated_at', T::TYPE_TIMESTAMP, null,

['nullable' => false, 'default' => T::TIMESTAMP_INIT_UPDATE],

'Updated At'

);

$installer->getConnection->createTable($table);

$installer->getConnection->addIndex(

$installer->getTable($this->_postTable),

$installer->getIdxName(

$installer->getTable($this->_postTable),

['name', 'url_key', 'post_content', 'tags', 'featured_image'],

\Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT

),

['name', 'url_key', 'post_content', 'tags', 'featured_image'],

\Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT

);

}

}

第二步 添加后台路由

文件: app/code/Aqrun/HelloWorld/etc/adminhtml/routes.xml

第三步 添加导航菜单

使用的路由名称是 aqrun_helloworld,那后台页面链接就会是 aqrun_helloworld/post/index

如何添加查看后台菜单部分内容

第四步 添加控制器

文件: app/code/Aqrun/HelloWorld/Controller/Adminhtml/Post/Index.php

namespace Aqrun\HelloWorld\Controller\Adminhtml\Post;

class Index extends \Magento\Backend\App\Action

{

protected $resultPageFactory = false;

public function __construct(

\Magento\Backend\App\Action\Context $context,

\Magento\Framework\View\Result\PageFactory $resultPageFactory

){

parent::__construct($context);

$this->resultPageFactory = $resultPageFactory;

}

public function execute()

{

$resultPage = $this->resultPageFactory->create();

$resultPage->getConfig()->getTitle()->prepend(__('Posts'));

return $resultPage;

}

}

第五步 方式一:使用组件创建后台网格

5.1 定义数据资源

创建依赖注入文件 di.xml 并定义数据资源,为我们的网格提供的数据关联模型。

文件: app/code/Aqrun/HelloWorld/etc/di.xml

代码:

Aqrun\HelloWorld\Model\ResourceModel\Post\Grid\Collection

type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">

aqrun_helloworld_post

Aqrun\HelloWorld\Model\ResourceModel\Post

这个文件为数据表定义了定义了 Post 集合类参数是 表名称和资源模型(ResouceModel)。节点说明:

type节点是编辑系统的CollectionFactory类根据参数会给他的变量collections增加一个资源键=>值 ['aqrun_helloworld_post_listing_data_source' => 'Aqrun\HelloWorld\Model\ResourceModel\Post\Grid\Collection']。

virtualType 节点是定义一个类 Aqrun\HelloWorld\Model\ResourceModel\Post\Grid\Collection 类继承自 Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult。

在下面的布局文件中网格会调用这个数据资源键来获取数据。

5.2 创建布局文件

控制器动作是 aqrun_helloworld/post/index, 对应的布局文件就是 aqrun_helloworld_post_index.xml

文件: app/code/Aqrun/HelloWorld/view/adminhtml/layout/aqrun_helloworld_post_index.xml

代码:

当前页面内容通过布局文件中定义的 uiComponet 节点获取对应组件

5.3 创建组件布局文件

根据上一步布局文件内容,现在我们创建组件布局文件 aqrun_helloworld_post_listing.xml

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_index.xml

代码:

aqrun_helloworld_post_listing.aqrun_helloworld_post_listing_data_source

aqrun_helloworld_post_listing.aqrun_helloworld_post_listing_data_source

spinner_columns

add

Add New Post

primary

*/*/new

Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider

aqrun_helloworld_post_listing_data_source

post_id

id

Magento_Ui/js/grid/provider

post_id

55

false

post_id

textRange

asc

ID

text

true

dataRange

Magento_Ui/js/grid/columns/date

date

Created

dateRange

Magento_Ui/js/grid/columns/date

date

Modified

根据以上代码可以了解如何定义网格布局,如何调用数据。现在清除缓存如下显示:

12e641e19bbc

8-post-list-1.png

5.4 添加列表工具条

如本文开始所提到的,网格系统也支持一些交互操作如:排序、筛选、删除更新等。排序是网格的默认功能,可以点击表头进行排序显示。接下来看看其它功能如何实现:

添加控件需要在组件布局文件的父节点listing下面进行编辑:

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

true

5.5 添加书签控件

这个参数会加载模板 Magento/Ui/view/base/web/templates/grid/toolbar.html,用来处理网格所有异步更新操作。控件窗口可以放在列元素前或后:

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

书签控件允许管理员设置网格不同状态。每种状态可有不同的字段列表。因此每个管理员用户可以选择它特定的信息显示。

5.6 列控件

这个控件会添加一个字段列表可以控制网格显示指定字段,改动之后可以选择把这个状态操作为一个书签,方便下次快速显示。

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

5.7 全文搜索

这个节点会在网格上面添加一个搜索框,可以搜索数据表的所有数据

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

5.8 筛选

这个节点为每个列定义一个筛选框

文件: 'app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml'

5.9 批量操作控件

这个节点会添加一个对列表进行批量操作的下拉列表。管理员可以使用这个控件一次性操作多条数据

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

Magento_Ui/js/grid/tree-massactions

delete

Delete

Delete Post

Are you sure you wan't to delete selected items?

5.10 分页

这个节点可以为网格添加分页按钮,如果有大量数据就会很实用

文件: app/code/Aqrun/HelloWorld/view/adminhtml/ui_component/aqrun_helloworld_post_listing.xml

5.11 导出

这个节点可以添加导出功能,你可以导出当前网格的数据

清空缓存如下显示

12e641e19bbc

8-post-list-2.png

第六步 第二种方式 使用布局文件创建网格

注意! 如果第五步已经完成了就路过这一步,当然也可以新增一个路由在新的页面使用这种方式实现

上面已经使用了组件的方式添加网格,现在这个来看看如何使用普通的 布局/区块 文件实现

6.1 为网格创建区块

文件: app/code/Aqrun/HelloWorld/Block/Adminhtml/Post.php

namespace Aqrun\HelloWorld\Block\Adminhtml;

class Post extends \Magento\Backend\Blcok\Widget\Grid\Container

{

protected function _construct()

{

$this->_controller = 'adminhtml_post';

$this->_blockGroup = 'Aqrun_HelloWorld';

$this->_headerText = __('Posts');

$this->_addButtonLabel = __('Create New Post');

parent::_construct();

}

}

网格区块继承了 \Magento\Backend\Blcok\Widget\Grid\Container 类,然后在 _construct() 方法中定义了一些变量

_blockGroup 是我们模块的名称格式为: VendorName_ModuleName

_controller 是区块文件夹中网格区块的路径,这里放的是 Adminhtml/Post 文件夹在的 Grid.php 文件

_headerText 是网格页面标题

_addButtonLabel 是创建按钮的显示文字

6.2 添加布局文件

现在添加布局文件并调用网格区块显示网格:

文件: app/code/Aqrun/HelloWorld/view/adminhtml/layout/aqrun_helloworld_post_index.xml

post_id

Aqrun\HelloWorld\Model\ResourceModel\Post\Collection

id

ASC

1

*/*/edit

ID

post_id

text

col-id

col-id

Name

name

text

col-id

col-id

Created

created_at

date

col-id

col-id

Modified

updated_at

date

col-id

col-id

布局文件中,定义了一些网格需要的参数,最主要的是 dataSource 节点。这个节点调用 di.xml 文件中定义的数据资源可以获取数据

6.4 添加控件

如何要使用批量操作控件可以添加下面的节点

post_id

ids

1

Delete

*/*/massDelete

清空缓存如下显示:

12e641e19bbc

8-post-list-3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android移动端通过网络访问后台数据的期末大作业是基于Android平台开发一款能够连接网络并实现与后台数据交互的应用程序。该应用程序主要分为两个部分:移动端和后台服务器。 移动端部分主要涵盖了用户界面、网络访问和数据展示等功能。用户界面通过Android提供的UI组件进行设计和实现,包括各种界面元素和交互逻辑。通过网络接口访问后台数据,可以使用Android提供的HttpClient或者Volley等网络库进行网络请求和响应。获取到数据后,可以通过适配器等方式将数据展示在移动端的界面上,例如列表、网格或详情页等。 后台服务器部分主要负责处理和存储数据的业务逻辑。后台服务器可以使用Java、PHP、Python等语言搭建,选择一个适合的框架进行开发。后台服务器可以提供RESTful API接口,用于接收移动端发送的请求,处理数据查询、存储或更新等操作,并将结果返回给移动端。数据存储可以使用关系型数据库如MySQL或非关系型数据库如MongoDB。 在实现期末大作业的过程,首先需要进行需求分析和界面设计,确定移动端应用的功能和交互逻辑。然后,搭建后台服务器,实现数据存储和处理的功能。接下来,在移动端通过网络请求访问后台数据,并将数据展示在界面上。最后,对整个应用进行测试和优化,确保其稳定性和性能。 通过完成这个期末大作业,可以掌握Android移动开发后台数据交互的基本原理和方法,了解移动端与后台服务器的通信方式,同时提升了分析问题、设计系统和解决实际问题的能力。 ### 回答2: Android移动端可以通过网络对后台数据进行访问,这是一种非常常见和实用的功能。在设计和实现Android移动终端的期末大作业时,我们可以选择一个合适的后台数据源,并使用网络请求与后台进行交互,以获取所需的数据。 首先,我们可以选择合适的数据接口,如通过API接口或使用HTTP请求与后台进行通信。根据后台提供的接口文档或者需求分析,我们可以使用Android的网络库(如Volley、OkHttp等)来发送请求并获取返回的数据。 在进行网络请求时,我们需要注意网络请求的安全性和稳定性。我们可以使用 HTTPS 加密通信,确保数据在传输过程的安全性。此外,我们还可以通过使用重试机制和错误处理来处理网络请求过程的异常情况,如网络连接超时或服务器错误等。 在获取到数据后,我们可以对数据进行解析和处理,以便在移动端进行展示。通过使用 JSON 或 XML 解析库,我们可以将返回的数据转换为移动端可读取和显示的对象。然后,我们可以根据设计需求,使用适当的布局和控件将数据展示在移动端界面上,例如列表、卡片式布局等。 另外,为了提高用户体验和应用性能,我们可以将数据进行缓存,以减少请求后台数据的频率。我们可以使用缓存库,如LruCache或DiskLruCache,来将数据本地化保存,并在需要时从本地获取数据。 总之,通过网络访问后台数据是Android移动端开发非常常见和重要的一部分。在期末大作业,我们可以选择一个合适的后台数据源、使用合适的网络库进行请求和数据处理,并结合适当的布局和控件将数据展示在移动端界面上,以达到项目的设计要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值