【问题标题】:Joomla Custom Compoment Dev Env : Hot DeploymentJoomla 自定义组件开发环境:热部署
【发布时间】:2012-03-08 02:26:30
【问题描述】:

我正计划开发一个 Joomla 自定义组件并将文件存储在 git repo 中。我的 git 项目的结构将模仿部署的 joomla 结构

<root>
-administrator
  -components
    -com_abc
-components
  -com_abc
-modules
  -com_abc
-plugins
  -com_abc

每次我想尝试使用 joomla 根文件夹作为我的 git 项目的根目录时,不必复制/压缩组件的 php/html 文件。我会使用 git ignore 功能来排除属于 joomla 核心项目的文件。我想知道有没有人做过类似的事情,你最初是如何部署你的组件的。是否只是使用 Joomla 扩展管理器并将目录指向 joomla 根目录的情况?

【问题讨论】:

    标签: git joomla devenv


    【解决方案1】:

    我自己不久前也做过这种事。我使用以下三个链接来设置我的开发结构:

    我现在得到的是一个单独的 Eclipse 项目,用于我的本地 Joomla 安装和每个 Joomla 扩展/模板。在我使用 Git 的每个扩展上,而不是 Joomla 安装本身。

    每次我对扩展进行更改时,我都会使用 Eclipse 构建器调用 Phing,将编辑后的文件复制到我的 Joomla 安装中。这样,我可以在本地测试更改。当我准备好将扩展部署到远程站点时,我使用 Phing 构建 zip 包,以便我可以使用 Joomla 扩展管理器手动安装它们。

    请注意,我使用的是 Windows,但我认为这对于其他操作系统也是一个很好的解决方案。用Eclipse做编辑器也不错,有代码补全等。我以前用过Notepad++。

    我的扩展文件夹结构:

    com_extensionname
        - backend
             - assets
             - controllers
             - helpers
             - language
             - models
             - sql
             - tables
             - views
             - access.xml
             - extensionname.php
             - config.xml
             - controller.php
             - index.html
             - router.php
             - LICENSE.txt
        - frontend
             - assets
             - controllers
             - helpers
             - language
             - models
             - views
             - extensionname.php
             - controller.php
             - index.html
             - router.php
        - build.xml
        - extensionname.xml
    

    运行以下文件的 Eclipse 外部工具:

    Location: Path to phing.bat
    Working Directory: ${project_loc}
    Arguments: create_packages (This only argument only goes to the "Create packages"-tool
    

    Phing xml 文件 (build.xml) 示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="Project Name" default="copy_to_test" basedir=".">
    <property name="test" value="YOUR PATH TO LOCAL JOOMLA INSTALLATION" override="true" />
    <property name="src" value="${project.basedir}" override="true"/>
    
    <!-- Package properties -->
    <property name="package_path" value="PATH WHERE PACKAGES SHOULD GO" override="true" />
    <property name="package_name" value="com_YOUREXTENSION" override="true" />
    
    <!-- Files -->
    <fileset dir="./frontend" id="frontend_files">
        <include name="**" />
        <exclude name="language/**" />
    </fileset>
    <fileset dir="./backend" id="backend_files">
        <include name="**" />
        <exclude name="language/**" />
        <exclude name="packages/**" />
    </fileset>
    
    <!-- Language files -->
    <fileset dir="./frontend/language" id="frontend_language_files">
        <include name="**" />
    </fileset>
    <fileset dir="./backend/language" id="backend_language_files">
        <include name="**" />
    </fileset>
    
    <!-- All files (for packaging) -->
    <fileset dir="${src}" id="allfiles">
        <include name="**" />
        <exclude name="backend/packages/**" />
        <exclude name=".**" />
    </fileset>
    
    <!-- Target: Copy to test -->
    <target name="copy_to_test" description="Copies files to test project.">
        <echo message="Running build.xml. Copying files from dev to test..." />
    
        <!-- Manifest file -->
        <copy file="MANIFEST_FILE.xml" todir="${test}/administrator/components/com_YOUREXTENSION" />
    
        <!-- Component files -->
        <copy todir="${test}/components/com_YOUREXTENSION">
            <fileset refid="frontend_files" />
        </copy>
        <copy todir="${test}/administrator/components/com_YOUREXTENSION">
            <fileset refid="backend_files" />
        </copy>
    
        <!-- Language files -->
        <copy todir="${test}/language/en-GB">
            <fileset refid="frontend_language_files" />
        </copy>
        <copy todir="${test}/administrator/language/en-GB">
            <fileset refid="backend_language_files" />
        </copy>
    </target>
    
    <!-- Target: Create packages -->
    <target name="create_packages" description="Generates package files">
        <echo message="Running build.xml. Generating package files" />
    
        <!-- <propertyprompt propertyName="package_version" defaultValue="" promptText="Enter version" /> -->
        <xmlproperty file="MANIFEST_FILE.xml"/>
    
        <delete file="${package_path}/${package_name}-${extension.version}.zip" />
        <delete file="${package_path}/${package_name}-${extension.version}.tar.gz" />
    
        <zip destfile="${package_path}/${package_name}-${extension.version}.zip">
            <fileset refid="allfiles" />
        </zip>
        <tar destfile="${package_path}/${package_name}-${extension.version}.tar.gz" compression="gzip">
            <fileset refid="allfiles" />
        </tar>
    </target>
    

    【讨论】: