CS-Cart addon.xml 文件完整路径

CS-Cart addon.xml file full path

如果为 cs-cart 模块创建 addon.xml 文件并指定带有 type=file 的选项

<?xml version="1.0"?>
<addon scheme="3.0">
    <id>my_addon</id>
    <version>1.0</version>
    <priority>4000</priority>
    <status>active</status>
    <auto_install>ULTIMATE,MULTIVENDOR</auto_install>
    <default_language>en</default_language>

    <dependencies/>
    <settings edition_type="ROOT,ULT:VENDOR">
        <sections>
            <section id="general">
                <items>
                    <item id="attach_file">
                        <type>file</type>
                    </item>
                </items>
            </section>
        </sections>
    </settings>
</addon>

客户端一切正常:文件管理器通过单击 "Browse..." 按钮打开,用户可以上传和 select 文件。但是当文件管理器中的文件被 selected 时,只有它的结束文件名被粘贴到模块设置表单字段中,因此,它不会存储上传的文件 location/path。只有它的文件名。我试过使用

Registry::get('config.dir.files').Registry::get('addons.my_addon.attach_file');

获取完整的上传文件路径,但无法正常使用。它 returns 类似于 /path/to/site/root/var/files/my-file.pdf 而不是真正的 /path/to/site/root/var/files/1/my-file.pdf (在文件名之前有一个额外的 1 目录,我不知道如何表示它)。如果手动添加额外的 1,那么它可能无法在不同的 CS-Cart 配置上工作。

那么,如何从管理面板的模块设置弹出窗口中的文件管理器中获取完整的上传文件路径?

fn_get_files_dir_path() 全局函数将 return 上下文特定(存储特定)文件路径。

例如。在你的情况下它将 return: /path/to/site/root/var/files/1/。然后你可以从附加设置中获取文件名:Registry::get('addons.my_changes.file') 就可以了。

但是您可以 link public 文件到附加设置,所以它可以是 2 种情况:

A:文件的路径是:fn_get_files_dir_path() . Registry::get('addons.my_changes.file')

B:文件路径为:fn_get_public_files_path() . Registry::get('addons.my_changes.file')

在使用该文件之前,您应该检查哪个路径有效。