以编程方式从CLI添加Joomla文章

时间:2015-10-18 19:10:32

标签: php joomla command-line-interface article joomla3.4

我希望能够使用Joomla CMS中的cli功能从命令行以编程方式在Joomla中添加许多文章。

我基本上使用的是Create a Joomla! Article Programatically,但在创建了一篇带有错误行的文章之后,我的脚本就关闭了

  

显示错误页面时出错:应用程序实例化   错误:应用程序实例化错误

这是我在Joomla的/ cli文件夹中运行的代码。

我正在使用Joomla 3.4

struct B {
    B();
    B(B&&) = default;                 // Explicitly default the 
    B& operator=(B&&) = default;      // move functions.

    B(const B&) = delete;             // Delete copy functions - Not strictly 
    B& operator=(const B&) = delete;  // necessary but just to be explicit.
};

struct A {
    std::vector<B> bs;
    void add(B b){
        bs.push_back(std::move(b));
    }
    B remove(std::vector<B>::iterator itr){
        B tmp = std::move(*itr);
        bs.erase(itr);
        return tmp;
    }  
};

struct C {
    A& a;
    std::vector<B> bs;
    C(A& a) : a(a) {}

    ~C(){
        for (auto& b : bs) {
            a.add(std::move(b));
        }
    }  // bs will be deleted now anyway, no need to remove the dead objects

    void add(B b){
        bs.push_back(std::move(b));
    }
    B remove(std::vector<B>::iterator itr){
        auto tmp = std::move(*itr);
        bs.erase(itr);
        return tmp;
    }
};

int main() {
    A a;
    C c(a);
    a.add(B());
    auto tmp = a.remove(a.bs.begin());
    c.add(std::move(tmp));
}

1 个答案:

答案 0 :(得分:2)

我能够找到答案,因为它已经在github上被提出作为一个问题,所以我在这里发布了这个解决方案。

https://github.com/joomla/joomla-cms/issues/7028

如果命令行应用程序使用JTable,则需要注册这样的应用程序:

class MakeSql extends JApplicationCli
{

   public function __construct() 
  {
     parent::__construct();
     JFactory::$application = $this; // this is necessary if using JTable
  }

  public function doExecute()
  {
      $db = JFactory::getDbo();
      // ... etc etc ...

我这样做了,效果很好。