3

实际上,我设法为我制作的插件制作了一个安装 zip,并且在安装脚本文件中,我将此代码包含在 install 函数中,以便将某些文件复制到另一个目录中 joomla 内的文件夹中。

class plgVmCustomPayeddownloadsInstallerScript {

   function install($parent) {

        $src = "plugins/vmcustom/payeddownloads/payeddownloads.php";
        $destination = "components/com_virtuemart/controllers";     
        if(!JFile::move($src, $destination,JPATH_ROOT)){
            echo "tried to move from ".$src." to ".$destination;
            return false;
    }
}

安装后,我在 joomla 中不断收到错误,“无法重命名文件”,并且应该由安装功能命令移动的文件没有,尽管事实上 install.xml 中的文件确实被复制了并正确安装。

同样在安装脚本中在安装功能中,我包含了一些正常执行的sql,没有任何问题。

而且我还尝试了 postflight 功能,但没有成功。我也没有从 php_error.log 中得到任何特定的错误

我还尝试在我的 joomla 安装的根应用程序中使用上面的 tester.php 文件创建这个奇怪的测试。

<?php
/**
 * @package     Joomla.Site
 * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// Set flag that this is a parent file.
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
    include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
    define('JPATH_BASE', dirname(__FILE__));
    require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';

// Mark afterLoad in the profiler.
JDEBUG ? $_PROFILER->mark('afterLoad') : null;

// Instantiate the application.
$app = JFactory::getApplication('site');

// Initialise the application.
$app->initialise();

// Mark afterIntialise in the profiler.
JDEBUG ? $_PROFILER->mark('afterInitialise') : null;

// Route the application.
$app->route();

// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER->mark('afterRoute') : null;

// Dispatch the application.
$app->dispatch();

// Mark afterDispatch in the profiler.
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;

// Render the application.
$app->render();

// Mark afterRender in the profiler.
JDEBUG ? $_PROFILER->mark('afterRender') : null;


    //plugins/vmcustom/payeddownloads/payeddownloads.php to 
    //components/com_virtuemart/controllers
    jimport('joomla.filesystem.file');
    $src = JPATH_ROOT."/plugins/vmcustom/payeddownloads/payeddownloads.php";
    $destination = JPATH_ROOT."/components/com_virtuemart/controllers/";        
    echo $src."<br>";
    echo $destination."<br>";
    JFile::move($src,$destination);

?>

该文件不会从 payeddownloads 移动到控制器文件夹,也不会导致任何错误。

另外我需要提到 php.ini 有 error_reporting = E_ALL 和 display_errors = On。php_error.log 也捕获错误。如果我输入例如 echo "lala"oo 它将记录错误并显示它。所以我怀疑 JFile::move 有一个错误,即使文件没有被复制,它也不会抛出任何错误。请问有什么建议吗?

4

2 回答 2

1

尝试改用以下内容。对您的代码进行了一些调整:

function install($parent) {

    $src = JPATH_SITE . "/plugins/vmcustom/payeddownloads/payeddownloads.php";
    $destination = JPATH_SITE . "/components/com_virtuemart/controllers";

    if(JFile::exists($src)){
       echo "File Exists!";
    }
    else{
       echo "File Doesn't Exist!";
    }
    if(JFolder::exists($destination)){
       echo "Destination Folder Exists!";
    }
    else{
       echo "Destination Folder Doesn't Exist!";
    }

    JFile::move($src, $destination); // Move file

    if(JFile::move($src, $destination)){
       echo "File Successfully Moved!";
    }
    else{
       echo "failed to move from ".$src." to ".$destination;
    }

}
于 2012-10-20T18:18:02.253 回答
0

即使认为线程很旧,我发现它也有同样的问题,也许该解决方案对其他人有用。

JFile::move 需要一个源文件路径和目标文件路径。在上面的代码中,路径应该如下所示。

$src = JPATH_SITE . "/plugins/vmcustom/payeddownloads/payeddownloads.php";
$destination = JPATH_SITE . "/components/com_virtuemart/controllers/payeddownloads.php";
于 2015-08-21T04:50:17.757 回答