# Implementing Template to a CMS
If you'd like to implement the template to a CMS, it's recommended to specify the absolute URLs for the template assets. Here is an implementation example for WordPress:
# ▶️ Step 1.
Define some useful global constants that we will use throughout the implementation later:
<?php
$theme = wp_get_theme();
$theme_version = $theme->get( 'Version' );
// Try to get the parent theme object
$theme_parent = $theme->parent();
// Set current theme version as parent not child
if ( $theme_parent ) {
$theme_version = $theme_parent->Version;
}
define( 'ARTS_THEME_VERSION', $theme_version );
define( 'ARTS_THEME_URL', get_template_directory_uri() );
# ▶️ Step 2.
Output the absolute paths to template assets with the help of the ARTS_THEME_URL
constant. Also, note the asli-app
id handler of our app.js
script.
<?php
/**
* Localize Theme Assets
*/
add_action( 'wp_enqueue_scripts', 'arts_inline_theme_assets', 60 );
function arts_inline_theme_assets() {
wp_localize_script(
'asli-app',
'asli_theme_assets', // this will go to app.assets.asli_theme_assets in JS
array(
'arts-header' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-header.min.js' ),
'id' => 'arts-header-js',
),
),
'arts-fullpage-slider' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-fullpage-slider.min.js' ),
'id' => 'arts-fullpage-slider-js',
),
),
'arts-infinite-list' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-infinite-list/arts-infinite-list.min.js' ),
'id' => 'arts-infinite-list-js',
),
),
'arts-horizontal-scroll' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-horizontal-scroll.min.js' ),
'id' => 'arts-horizontal-scroll-js',
),
),
'arts-parallax' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-parallax.min.js' ),
'id' => 'arts-parallax-js',
),
),
'arts-cursor-follower' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/arts-cursor-follower.min.js' ),
'id' => 'arts-cursor-follower-js',
),
),
'circle-type' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/circletype.min.js' ),
'id' => 'circle-type-js',
),
),
'photoswipe' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/photoswipe.umd.min.js' ),
'id' => 'photoswipe-js',
),
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/photoswipe-lightbox.umd.min.js' ),
'id' => 'photoswipe-lightbox-js',
),
),
'lenis' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/lenis.min.js' ),
'id' => 'lenis-js',
),
),
'barba' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/barba.min.js' ),
'id' => 'barba-js',
),
),
'curtains' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/curtains.umd.custom.min.js' ),
'id' => 'curtains-js',
),
),
'pristine' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/pristine.min.js' ),
'id' => 'pristine-js',
),
),
'bootstrap-modal' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/bootstrap-modal.min.js' ),
'id' => 'bootstrap-modal-js',
),
),
'isotope' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/isotope.pkgd.min.js' ),
'id' => 'isotope-js',
),
),
'dat-gui' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/vendor/dat.gui.min.js' ),
'id' => 'dat-gui-js',
),
),
),
);
}
# ▶️ Step 3.
Now do the same for the template components:
<?php
/**
* Localize Theme Options
*/
add_action( 'wp_enqueue_scripts', 'arts_inline_theme_components', 60 );
function arts_inline_theme_components() {
wp_localize_script(
'asli-app',
'asli_theme_components', // this will go to app.assets.asli_theme_components in JS
array(
'Preloader' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Preloader.js' ),
),
'Header' => array(
'dependencies' => array( 'arts-header' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Header.js' ),
),
'MenuOverlay' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/MenuOverlay.js' ),
),
'MenuClassic' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/MenuClassic.js' ),
),
'SliderFullpageBackgroundsMask' => array(
'dependencies' => array( 'arts-fullpage-slider' ),
'files' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/components/SliderFullpageBase.js' ),
'id' => 'slider-fullpage-base-js',
),
),
'file' => esc_url( ARTS_THEME_URL . '/js/components/SliderFullpageBackgroundsMask.js' ),
),
'SliderFullpageBackgroundsSlide' => array(
'dependencies' => array( 'arts-fullpage-slider' ),
'files' => array(
array(
'type' => 'script',
'src' => esc_url( ARTS_THEME_URL . '/js/components/SliderFullpageBase.js' ),
'id' => 'slider-fullpage-base-js',
),
),
'file' => esc_url( ARTS_THEME_URL . '/js/components/SliderFullpageBackgroundsSlide.js' ),
),
'SliderTestimonials' => array(
'dependencies' => array( 'arts-fullpage-slider' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/SliderTestimonials.js' ),
),
'InfiniteList' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/InfiniteList.js' ),
),
'CurtainsBase' => array(
'dependencies' => array( 'curtains' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/CurtainsBase.js' ),
),
'SplitCounter' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/SplitCounter.js' ),
),
'MarqueeHeader' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/MarqueeHeader.js' ),
),
'MarqueeHeadingsHover' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/MarqueeHeadingsHover.js' ),
),
'ScreensWall' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/ScreensWall.js' ),
),
'RotatingButton' => array(
'dependencies' => array( 'circle-type' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/RotatingButton.js' ),
),
'ArcImages' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/ArcImages.js' ),
),
'Scroll' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Scroll.js' ),
),
'AJAX' => array(
'dependencies' => array( 'barba' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/AJAX.js' ),
),
'Masthead' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Masthead.js' ),
),
'Content' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Content.js' ),
),
'Parallax' => array(
'dependencies' => array( 'arts-parallax' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Parallax.js' ),
),
'HorizontalScroll' => array(
'dependencies' => array( 'arts-horizontal-scroll' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/HorizontalScroll.js' ),
),
'CursorFollower' => array(
'dependencies' => array( 'arts-cursor-follower' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/CursorFollower.js' ),
),
'PSWP' => array(
'dependencies' => array( 'photoswipe' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/PSWP.js' ),
),
'GMap' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Gmap.js' ),
),
'FormAJAX' => array(
'dependencies' => array( 'pristine', 'bootstrap-modal' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/FormAJAX.js' ),
),
'Grid' => array(
'dependencies' => array( 'isotope' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Grid.js' ),
),
'AutoScrollNext' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/AutoScrollNext.js' ),
),
'FixedHeader' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/FixedHeader.js' ),
),
'FixedWall' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/FixedWall.js' ),
),
'CounterUp' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/CounterUp.js' ),
),
'SliderImages' => array(
'dependencies' => array( 'arts-infinite-list' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/SliderImages.js' ),
),
'ClickAndHold' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/ClickAndHold.js' ),
),
'Mask' => array(
'dependencies' => array(),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Mask.js' ),
),
'Gui' => array(
'dependencies' => array( 'dat-gui', 'barba' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Gui.js' ),
),
'Comments' => array(
'dependencies' => array( 'pristine' ),
'file' => esc_url( ARTS_THEME_URL . '/js/components/Comments.js' ),
),
)
);
}
# ▶️ Step 4.
Enqueue the template JS assets.
<?php
/**
* Enqueue Theme JS Files
*/
add_action( 'wp_enqueue_scripts', 'arts_enqueue_js', 50 );
function arts_enqueue_js() {
// GSAP libraries
$gsap_libraries_version = '3.12.2';
$vendor_scripts_path = ARTS_THEME_URL . '/js/vendor/';
wp_enqueue_script( 'gsap', $vendor_scripts_path . 'gsap.min.js', array(), $gsap_libraries_version, true );
wp_enqueue_script( 'drawsvg-plugin', $vendor_scripts_path . 'DrawSVGPlugin.min.js', array( 'gsap' ), $gsap_libraries_version, true );
wp_enqueue_script( 'morphsvg-plugin', $vendor_scripts_path . 'MorphSVGPlugin.min.js', array( 'gsap' ), $gsap_libraries_version, true );
wp_enqueue_script( 'scroll-to-plugin', $vendor_scripts_path . 'ScrollToPlugin.min.js', array( 'gsap' ), $gsap_libraries_version, true );
wp_enqueue_script( 'split-text', $vendor_scripts_path . 'SplitText.min.js', array( 'gsap' ), $gsap_libraries_version, true );
wp_enqueue_script( 'scrolltrigger', $vendor_scripts_path . 'ScrollTrigger.min.js', array( 'gsap' ), $gsap_libraries_version, true );
wp_enqueue_script( 'deepmerge', $vendor_scripts_path . 'deepmerge.min.js', array(), ARTS_THEME_VERSION, true );
wp_enqueue_script( 'distribute-by-position', $vendor_scripts_path . 'distributeByPosition.js', array(), ARTS_THEME_VERSION, true );
wp_enqueue_script( 'lazy-load', $vendor_scripts_path . 'lazyload.min.js', array(), ARTS_THEME_VERSION, true );
wp_enqueue_script(
'asli-framework',
ARTS_THEME_URL . '/js/framework.js',
array(
'gsap',
'drawsvg-plugin',
'morphsvg-plugin',
'scroll-to-plugin',
'split-text',
'scrolltrigger',
'deepmerge',
'distribute-by-position',
'lazy-load',
),
ARTS_THEME_VERSION,
true
);
wp_enqueue_script( 'asli-app', ARTS_THEME_URL . '/js/app.js', array( 'asli-framework' ), ARTS_THEME_VERSION, true );
}
# ▶️ Step 5.
If you did everything correctly, we should now have two global variables outputted before the asli-app
script: asli_theme_assets
and asli_theme_components
. They hold data for the template assets, including their absolute URLs to the files.
Now open the template main frontend file 📄 HTML/js/app.js
and replace built-in maps for assets and components as follows:
window.app = {
// Theme assets URLs
assets: asli_theme_assets,
// Theme components schema
components: asli_theme_components
}
This implementation will work even if you change the domain name later on since all assets paths will be updated thanks to the ARTS_THEME_URL
constant.