这是我拥有的 CLI,它读取 csv 文件并从中创建标签。通过使用 API,store() 将创建正确的嵌套数据。这非常粗糙,因为它只是用于测试标签 api/性能,因此您可能需要清理它,特别是如果您有其他数据要放入 csv(或不同的数据源)。更新:它也有点旧,所以你可能需要导入 cms 和遗留库,因为在 3.2 中对 store() 进行了更改。这是 docs wiki 中关于为什么 CLI 应用程序在 3.2 中中断的内容,您应该查看。
<?php
/**
* @package Joomla.Shell
*
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
if (!defined('_JEXEC'))
{
// Initialize Joomla framework
define('_JEXEC', 1);
}
@ini_set('zend.ze1_compatibility_mode', '0');
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Load system defines
if (file_exists(dirname(__DIR__) . '/defines.php'))
{
require_once dirname(__DIR__) . '/defines.php';
}
if (!defined('JPATH_BASE'))
{
define('JPATH_BASE', dirname(__DIR__));
}
if (!defined('_JDEFINES'))
{
require_once JPATH_BASE . '/includes/defines.php';
}
// Get the framework.
require_once JPATH_LIBRARIES . '/import.php';
// Get the framework.
require_once JPATH_LIBRARIES . '/import.legacy.php';
// Bootstrap the CMS libraries.
require_once JPATH_LIBRARIES . '/cms.php';
// Import the configuration.
require_once JPATH_CONFIGURATION . '/configuration.php';
// System configuration.
$config = new JConfig;
// Include the JLog class.
jimport('joomla.log.log');
// Add the logger.
JLog::addLogger(
// Pass an array of configuration options
array(
// Set the name of the log file
'text_file' => 'test.log.php',
// (optional) you can change the directory
'text_file_path' => 'somewhere/logs'
)
);
// start logging...
JLog::add('Starting to log');
// Configure error reporting to maximum for CLI output.
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
* Create Tags
*
* @package Joomla.Shell
*
* @since 1.0
*/
class Createtags extends JApplicationCli
{
public function __construct()
{
// Call the parent __construct method so it bootstraps the application class.
parent::__construct();
require_once JPATH_CONFIGURATION.'/configuration.php';
jimport('joomla.database.database');
// System configuration.
$config = JFactory::getConfig();
// Note, this will throw an exception if there is an error
// Creating the database connection.
$this->dbo = JDatabaseDriver::getInstance(
array(
'driver' => $config->get('dbtype'),
'host' => $config->get('host'),
'user' => $config->get('user'),
'password' => $config->get('password'),
'database' => $config->get('db'),
'prefix' => $config->get('dbprefix'),
)
);
}
/**
* Entry point for the script
*
* @return void
*
* @since 2.5
*/
public function doExecute()
{
if (($handle = fopen(JPATH_BASE."/cli/keyword.csv", "r")) !== FALSE)
{
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$date = new JDate();
include_once JPATH_BASE . '/administrator/components/com_tags/tables/tag.php';
$table = new TagsTableTag(JFactory::getDbo());
$table->title = $data[0];
$table->note = '';
$table->description = '';
$table->published = 1;
$table->checked_out = 0;
$table->checked_out_time = '0000-00-00 00:00:00';
$table->created_user_id = 42;
$table->created_time = $date->toSql();
$table->modified_user_id = 0;
$table->modified_time = '0000-00-00 00:00:00';
$table->hits = 0;
$table->language = 'en-GB';
//$table->parent_id = 1;// doesn't do anything
//$table->level = 1;// doesn't do anything
// $table->setLocation(0, 'last-child');
$table->check();
$table->store();
}
fclose($handle);
}
}
}
if (!defined('JSHELL'))
{
JApplicationCli::getInstance('Createtags')->execute();
}