将 OctoberCMS 中的用户列表导出为 CSV
Posted
技术标签:
【中文标题】将 OctoberCMS 中的用户列表导出为 CSV【英文标题】:Export a list of users in OctoberCMS to CSV 【发布时间】:2020-02-05 18:14:00 【问题描述】:我已阅读有关在 OctoberCMS 中使用导入和导出功能的教程。
但是对于rainlab-users
插件,这些指南不起作用。我也尝试安装插件vojtasvoboda-userimportexport
,但它会导出所有用户,而不是过滤的用户。
class Users extends \RainLab\User\Controllers\Users
public $implement = [
'Backend.Behaviors.FormController',
'Backend.Behaviors.ListController',
'Backend.Behaviors.ImportExportController',
];
....
当我将此代码添加到Users.php
控制器时,我收到错误:
Class .....\User\Controllers\Users 已经使用 Backend\Behaviors\ImportExportController 进行了扩展。
当我尝试在没有上述代码的情况下导出时,出现错误:
调用未定义的方法 October\Rain\Database\QueryBuilder::export()
【问题讨论】:
【参考方案1】:我认为这有点困难,因为我们无法访问用户插件工具栏来添加按钮。
但是是的我们可以做到,我们需要更加努力:)让我们开始
最终结果
要添加导出按钮,我们需要扩展
rainlab.user
插件。所以从你自己的插件中你需要它。
1.在插件的 Boot 方法中添加扩展代码
class Plugin extends PluginBase
use \System\Traits\ConfigMaker; // trait to read config
public function boot()
\RainLab\Users\Controllers\Users::extend(function($controller)
// we only extend if its not already extended with ImportExport Behavior
if(!$controller->isClassExtendedWith('Backend.Behaviors.ImportExportController'))
$controller->implement[] = 'Backend.Behaviors.ImportExportController';
// make sure you replace this path to your plugin directory
$extensionPath = '$/hardiksatasiya/stackdemo/user_extension_files/';
$controller->addDynamicProperty(
'importExportConfig',
$extensionPath . 'config_import_export.yaml'
);
$newListConfig = $this->makeConfig(
'$/rainlab/user/controllers/users/config_list.yaml'
);
$newListConfig->toolbar['buttons'] =
$extensionPath . '_new_list_toolbar.htm';
$controller->listConfig = $newListConfig;
);
....
2。创建文件夹和文件
在插件的根目录中创建文件夹并将其命名为user_extension_files
在那个目录里面
在内容中添加config_import_export.yaml
export:
useList: true
在内容中添加_new_list_toolbar.htm
[这将只是plugins/rainlab/user/controllers/users/_list_toolbar.htm
的副本,稍作修改]
添加Our Brand New Shiny Export button
不粘贴整个代码会太长,所以只粘贴它的片段。
<div data-control="toolbar">
... copied code ...
<!-- our export button -->
<a
href="<?= Backend::url('rainlab/user/users/export') ?>"
class="btn btn-primary oc-icon-sign-out">
Export
</a>
</div>
现在,当您点击导出按钮时,它应该会导出记录,它还会 尊重所有应用的过滤器。
@NOTE:我们正在将代码复制到
_new_list_toolbar.htm
,因此,如果将来用户插件正在更新并且他们决定在工具栏中添加新按钮,那么我们将无法拥有它变化。因此,那时我们只需将代码从plugins/rainlab/user/controllers/users/_list_toolbar.htm
复制并粘贴到我们的文件_new_list_toolbar.htm
中。我们又回来了:)。
如有任何疑问,请发表评论。
【讨论】:
非常感谢!对我的项目进行一些修改后,您的代码就可以工作了!【参考方案2】:所以我实际上以与控制器不同的方式解决了此类问题。我制作了一个分离的前端管理系统。因此,网站所有者永远不必登录后端。相信我,这已经为用户避免了许多头疼和错误,因为他们会弄乱他们不应该做的事情。所以这就是我解决这个问题的方法:
-
安装插件 Content Type by Sozonov Alexey
制作一个 CMS 页面并确保它的 .csv 在 URL 的末尾。你 应该看到内容类型插件在 页面设置。您可以单独保留 html 选择,但添加 text/csv 在它的右边是你自己的。
这是一个页面模板的示例。
% spaceless %
NAME,EMAIL
% for row in csv %
row.name , row.email
% endfor %
% endspaceless %
这是 CMS 页面 PHP 代码部分的外观。这可以让您对列表进行查询并根据需要进行过滤。然后,您可以检查客户端是否登录到后端或以用户身份登录,并且可能是管理员或版主。当然你可以制作一个插件和组件,然后附加到这个页面上。
use Rainlab\User\Models\User;
function onStart()
$users = User::all();
$this['csv'] = $users;
旁注我使用相同的技术来创建动态 css、javascript 或 rss 提要。我也使用它来制作站点地图。
【讨论】:
@Pettis
可能是你误会了,他想要filtered list of users to be exported
不是所有的。正如他已经提到的he can export all the user
。也似乎它不适用于Frontend
he used plugin and plugin is for back-end
- so he is talking about backed I guess
@HardikSatasiya 我实际上希望你能直接回答他关于后端的问题。我会说,虽然我没有误解。我说“与控制器中的方式不同”,我还说“这可以让您对列表进行查询并根据需要进行过滤”。这是一个可行的解决方案,我说它是在前端达到的,但是哦?
是的,我有点忙,但一旦有时间,我一定会提供一些答案:),很高兴知道你没有弄错主意。我以为您将其发布为答案,所以只是指出:)以上是关于将 OctoberCMS 中的用户列表导出为 CSV的主要内容,如果未能解决你的问题,请参考以下文章
OctoberCMS 如何使用插件扩展中的字段创建自定义用户注册表单
将 SharePoint 2007 列表/视图导出为 PDF(并通过链接下载)