Experimental project

This is a sandbox project, which contains experimental code for developer use only.

Issue: Widget or Theme needs sample data for kickstart. There is no automatic, easy and standard way to package Sample Data with all of its assets(i.e. images, videos,etc) part of single artifact deliverable for easy install in Drupal.

Solution: Use Features module along with Sample Data module for sample data exports/imports in an automotive manner without another dependency

The common practice to package widgets and themes at DesignsSquare.com delivered to client is by separating the deliverable into 3 parts - code, Structures&Configurations and Sample Data for KickStart all part of one deliverable via Features. The Sample Data part contains sample nodes, menu instances and assets referenced from content, fields and variables.

To automate the packaging process for Sample Data part of the deliverable, we have created Sample Data module. The Sample Data module does the following:

    1. Export/Imports nodes with Alias path
    2. Export/Imports menus bases on Alias path
    3. Handle the assets – images, videos, etc for sample data. Specifically:
    A) assets referenced from sample content or other modules located in default public directory(i.e. sites/default/file)
    B) assets referenced by fields(both core type or custom type)
    C) assets referenced by variables
    4. Overrides for context and StormArm variables

Note: assets referenced by custom fields and variables need to use file_managed functionality to work

1. Export/Imports nodes with Alias path

In order to have alias path, you will have to install and enable alias path module - https://www.drupal.org/project/pathauto. Once the sample data have alias path, then export it from features(admin/structure/features). The Sample Data module will hook into the export and store alias path for each node later to restore at the time of import

2. Export/Imports Menus based on Alias path

Once you have the pathauto module enabled, each node will have the alias path used by Sample Data to export and import Menus. Go to Features(admin/structure/features) and look for section "MENU ALIAS" with options to select menues you like to import/export. It will store the menus in the export and then import to the new instance based on alias path. Since it uses alias path, each menu has to have unique links(alias path) to work

3A) Assets referenced from sample content or other modules

Your sample content may be referencing assets. It is also possible that other modules like "imce" for editor is storing assets. The Sample Data module lets you export those assets. Go to Features(admin/structure/features) and look for section "Content Assets". In this section, it will display all assets(files and directories) from the public directory. Select the ones you like to export and it will store them for later import in the new instance. If you select directory, then it will store the whole tree of the assets

3B) Assets Referenced by Fields

Your sample data(nodes) may have fields of type 'file' that is going to reference assets. The Sample Data module will automatically store those assets when you are exporting the sample data(nodes). It will automatically transfer the assets at the time of import in the new instance. The Sample Data module does the same for custom fields referencing assets and not only the Drupal default such as 'file'. There is one requirement. The 'file_managed' functionality needs to be handling the asset in order for the import/export to work

3C) Assets Referenced By Variables

You may have chosen to store asset references in form of FID in the Drupal variable. The Sample Data module will export/import this assets as long as the name of the variable is stored part of the entry in the file_usage table for field(column) - 'type':

        //we also add variable name as the 'type' parameter, so we can export via Sample Data module
        file_usage_add($file, 'module_name', 'VARIABLE_NAME', '1');
        // Save.
        file_save($file);

As you see, the variable name is saved part of the usage entry. This is done, so Sample Data module exports the asset

Once the variable is holding reference to the asset and the variable name is stored part of entry in the file_usage table, then in section 'VARIABLE ASSETS' in the Features page(admin/structure/features) there is listed available references for you to select to export/import those assets.

4. Overrides for context and StormArm variables

The "CONTEXT OVERRIDE" provides a solution to the fact that features doesn't let you export something that is already part of another feature. This is an issue if you say have a widget with context that needs to be overridden by site specific context. So by select the context from "CONTEXT OVERRIDE", it will store those context to import in the new instance

The "STRONGARM OVERRIDE", besides the ability of overriding another conflicting feature, it also provides a solution to be able export home page, error 404, 403 that is impossible otherwise because it uses the hard coded path(node/id) specific to each Drupal instance. The Sample Data utilizes alias path to import/export home page, error 404 and 403 pages

To summarize, the Sample Data module is one full solution for exporting/importing Sample data for Kickstart data. It exports/imports nodes and menus using alias path. It handles all the assets referenced by content, fields or variables. It also provides ability to override contexts as well as export/import home page, error 404, 403 pages. It does all for you, so you can forget about sample data & assets and focus on more important aspects like building widgets,themes and other cool things

Troubleshooting

I am unable to export Content(nodes) via futures

Ensure you have the correct versions for features (7.x-2.0 or above), feature_uuid (7.x-1.0-alpha4...the dev version on July 2014) and uuid (7.x-1.0-alpha5...dev version on July, 2014). Afterwards, enable the content to be exported at admin/config/content/uuid_features

More Resources

Import/Export Sample Data and Assets for Kickstart All Via Features
Handling Artifacts For Custom Module
https://github.com/kapasoft-config-scripts/designssquare-lib-assets

The specified file public://artifact-name.jpg could not be copied, because the destination directory is not properly configured

Ensure the export feature module has write access and re-create the feature.

Project information

  • Created by kapacs on , updated