X-Cart:Dynamic .tpl Patcher
Using the dinamic .tpl patcher to create a module
You can use smarty prefilters/output filters to insert the module entry points in the current skin during compilation - which is preferable - or when the template is displayed.
You may find the files here: http://help.x-cart.com/index.php?title=File:Dynamic_tpl_patcher.4.7.x.php or here: http://help.x-cart.com/index.php?title=File:Dynamic_tpl_patcher.4.6.x.php
Examples of using prefilters:
1) adding the following piece of code in init function of func_MODULE_init
if (AREA_TYPE == 'C') { require $xcart_dir . XC_DS . 'modules' . XC_DS . 'Pilibaba' . XC_DS . 'lib' . XC_DS . 'dynamic_tpl_patcher.php'; modules\Pilibaba\lib\x_tpl_add_callback_patch('customer/main/cart.tpl', 'func_pilibaba_tpl_insertButton', X_TPL_PREFILTER); modules\Pilibaba\lib\x_tpl_add_callback_patch('customer/minicart.tpl', 'func_pilibaba_tpl_insertButton', X_TPL_PREFILTER); modules\Pilibaba\lib\x_tpl_add_callback_patch('modules/Add_to_cart_popup/product_added.tpl', 'func_pilibaba_tpl_insertButton', X_TPL_PREFILTER); }
2) add the following in func_pilibaba_tpl_insertButton
function func_pilibaba_tpl_insertButton($tpl_name, $tpl_source) {//
Example of using output filter run on certain pages:
if (
'C' != x_get_area_type() && x_check_controller_condition(NULL, array('register', 'user_modify'))
) {
x_tpl_add_regexp_patch( 'modules/XAuth/linked_accounts_admin.tpl',
'/(<form [^>]*name="registerform"[^>]*>.+)(.+<\/tr>)/USs', '\1%%\2' ); } x_tpl_add_listener('modules/XAuth/register.tpl', 'before', 'func_xauth_prepare_register'); x_tpl_add_listener('modules/One_Page_Checkout/profile/account_info.tpl', 'before', 'func_xauth_prepare_register'); Using prefilters helps to simplify adding modules insert points, including 3rd-party modules.