Personal tools
Namespaces

Variants
Actions

Product Linker For WHMCS

From ModulesGarden Wiki
(Difference between revisions)
Jump to: navigation, search
(Common Problems)
 
(52 intermediate revisions by 6 users not shown)
Line 4: Line 4:
 
=About [https://www.modulesgarden.com/products/whmcs/product-linker Product Linker For WHMCS]=
 
=About [https://www.modulesgarden.com/products/whmcs/product-linker Product Linker For WHMCS]=
 
{|
 
{|
|style="padding: 10px 0px 5px 0px;"|'''Product Linker For WHMCS''' allows you to create relations between your products, addons and configurable options. <br/>
+
|style="padding: 10px 0px 5px 0px;"|'''Product Linker For WHMCS''' enables you to establish dynamic connections between products, addons, and configurable options.<br/> This facilitates bundled purchases for customers, supported by flexible discounts.<br/>
Consequently, clients may buy products in bundles along with flexible promo codes.<br />
+
The module also provides an intuitive interface for viewing, filtering, and managing existing product associations, giving you full control over the active connections used by your clients.
Module will also allow you to view, filter and delete existing connections used by your customers.
+
 
|}
 
|}
<!--fix by comment, awesome-->
 
 
*'''Automation Features:'''
 
*'''Automation Features:'''
 
{|
 
{|
|style="padding: 10px 0px 0px 30px;"|✔ Handle Dependencies Between Module Actions - Each Create/Terminate/Suspend/Unsuspend Action Called On Main Product Triggers Such Action On Child Products
+
|style="padding: 10px 0px 0px 30px;"|✔ Handle Dependencies Between Module Actions:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Enable Product Updates With Automatic Email Notifications Sent To Administrators
+
|style="padding: 0px 0px 0px 45px;"|✔ Each Create/Terminate/Suspend/Unsuspend Action Performed On Main Product Triggers Such Action On Child Products
 
|}
 
|}
 
{|
 
{|
Line 21: Line 19:
 
*'''Admin Area Features:'''
 
*'''Admin Area Features:'''
 
{|
 
{|
|style="padding: 10px 0px 0px 30px;"|✔ Define Relations Between Chosen Product, Addons, Configurable Options And Linked Products
+
|style="padding: 10px 0px 0px 30px;"|✔ Define Relations Between Chosen Products And:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Define If Addon Price Should Be Switched With Linked Product Price
+
|style="padding: 0px 0px 0px 45px;"|✔ Product Addons
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Assign Custom Promo Codes To Relations
+
|style="padding: 0px 0px 0px 45px;"|✔ Configurable Options
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ View, Filter And Delete Existing Connections
+
|style="padding: 0px 0px 0px 45px;"|✔ Linked Products
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 30px;"|✔ View Error Logs
+
|style="padding: 0px 0px 0px 30px;"|✔ Define If Product Addon Price Should Be Switched With Linked Product Price
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Copy Custom Fields Between Configured Relations
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Assign Custom Promo Codes To Relations:
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 45px;"|✔ Select Discount Priority
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 45px;"|✔ Define Minimum Discount Amount
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ View, Filter And Delete Existing Connections Between Linked Products
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Enable Related Products Notices In Client Cart
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ View Product Upgrades/Downgrades Tasks Queue
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Customize Module Language Files With "Translations" Tool
 +
|}
 +
{|
 +
|style="padding: 0px 0px 10px 30px;"|✔ View And Manage Logs
 
|}
 
|}
 
*'''Client Area Features:'''
 
*'''Client Area Features:'''
 
{|
 
{|
|style="padding: 10px 0px 0px 30px;"|✔ Buy Multiple Products, Addons And Configurable Options By Ordering At Least One Of Them
+
|style="padding: 10px 0px 0px 30px;"|✔ Purchase Multiple Products, Addons And Configurable Options By Ordering Just One
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 30px;"|✔ View Linked Product Added To Order By Triggering Relation
+
|style="padding: 0px 0px 10px 30px;"|✔ View Linked Product Added To Order After Relation Is Triggered
 
|}
 
|}
  
 
*'''General Info:'''
 
*'''General Info:'''
 
{|
 
{|
|style="padding: 10px 0px 0px 30px;"|✔ Integrated With <u>cPanel Manage2 For WHMCS</u> - Easy Reselling Of cPanel Licenses [http://www.modulesgarden.com/products/whmcs/cpanel_manage2/features (read more)]
+
|style="padding: 10px 0px 0px 30px;"|✔ Integrated With [https://www.modulesgarden.com/products/whmcs/cpanel-manage2 cPanel Manage2 For WHMCS] - Easy Reselling Of cPanel Licenses
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Integrated With <u>DirectAdmin Licenses For WHMCS</u> - Easy DirectAdmin Licenses Reselling [http://www.modulesgarden.com/products/whmcs/directadmin_licenses/features (read more)]
+
|style="padding: 0px 0px 0px 30px;"|✔ Integrated With [https://www.modulesgarden.com/products/whmcs/directadmin-licenses DirectAdmin Licenses For WHMCS] - Easy Reselling Of DirectAdmin Licenses
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Integrated With <u>Odin Key Administrator For WHMCS</u> - Easy Odin Licenses Reselling [http://www.modulesgarden.com/products/whmcs/odin_key_administrator/features (read more)]
+
|style="padding: 0px 0px 0px 30px;"|✔ Integrated With [https://www.modulesgarden.com/products/whmcs/plesk-key-administrator Plesk Key Administrator For WHMCS] - Easy Reselling Of Plesk Licenses
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Multi-Language Support
+
|style="padding: 0px 0px 0px 30px;"|✔ Multi-Language Support With Custom Translations Tool
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Supports PHP 5.4 Up To PHP 7
+
|style="padding: 0px 0px 0px 30px;"|✔ Supports PHP 8.2 Back To PHP 8.1
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 30px;"|✔ Supports WHMCS V6 and V7
+
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS Themes "Six" And "Twenty-One"
 
|}
 
|}
 
=Installation=
 
 
{|
 
{|
|style="padding: 10px 0px 0px 0px;"|'''This tutorial will show you how to successfully install Product Linker For WHMCS.''' <br />
+
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS V8.11 Back To WHMCS V8.8
We will guide you step by step through the whole installation and configuration process. <br />
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 20px 0px 20px 15px;"|'''1. Log in to your client area and download the module.'''
+
|style="padding: 0px 0px 0px 30px;"|✔ Requires ionCube Loader V13 Or Later
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL1.png]]
+
|style="padding: 0px 0px 30px 30px;"|✔ Easy [https://www.docs.modulesgarden.com/How_To_Upgrade_WHMCS_Module Module Upgrade] To [https://www.modulesgarden.com/products/whmcs/product-linker#open-source-version Open Source Version]
 +
|}
 +
 
 +
=Installation=
 +
{|
 +
|style="padding: 10px 0px 0px 0px;"|'''This tutorial will show you how to successfully install [https://www.modulesgarden.com/products/whmcs/product-linker Product Linker For WHMCS.]''' <br />
 +
We will guide you step by step through the whole installation and configuration process. <br />
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 15px;"|'''2. In the downloaded file you will find two packages that support different PHP versions.'''<br/>As presented on the screen below, the first one is dedicated to PHP 7, while the second one is aimed at PHP 5.4 up to PHP 5.6.<br/>It does not apply to open source versions.<br/>
+
|style="padding: 20px 0px 20px 15px;"|'''1. Log in to our client area and download the module.'''
'' '''Note''': You can check current PHP version in your WHMCS. To do so proceed to ''' 'Utilities' → 'System' → 'PHP Info'.'''
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_0.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''3. Extract the downloaded file and choose the one with the right PHP version. Upload and extract the PHP file into the main WHMCS directory.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''3. Extract the package and upload its content into the main WHMCS directory.
The content of PHP version files should look like this.  
+
The content of the package to upload should look like this.  
 
|}
 
|}
 
{|
 
{|
Line 90: Line 117:
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|'''4. When you install Product Linker For WHMCS for the first time you have to rename '' 'license_RENAME.php' '' file.'''<br />
 
|style="padding: 0px 0px 15px 15px;"|'''4. When you install Product Linker For WHMCS for the first time you have to rename '' 'license_RENAME.php' '' file.'''<br />
File is located in '' 'modules/addons/productlinker/license_RENAME.php'. '' Rename it from '' 'license_RENAME.php' '' to '' 'license.php'. ''
+
The file is located in '' 'modules/addons/ProductLinker/license_RENAME.php'. '' Rename it from '' 'license_RENAME.php' '' to '' 'license.php'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL3.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_1.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''5. In order to configure your license key, you have to edit a previously renamed '' 'license.php' file.' '' '''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''5. In order to configure your license key, you have to edit the previously renamed '' 'license.php' file.' '' '''<br />
Enter your license key between quotation marks as presented on the following screen. You can find your license key in your client area → '' 'My Products'. ''  
+
Enter your license key between quotation marks as presented on the following screen. You can find your license key in our client area → '' 'My Products'. ''  
 
|}
 
|}
 
{|
 
{|
Line 104: Line 131:
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|'''6. Now you have to activate the module in your WHMCS system.'''<br />
 
|style="padding: 0px 0px 15px 15px;"|'''6. Now you have to activate the module in your WHMCS system.'''<br />
Log in to your WHMCS admin area. Go to '' 'Setup' '' → '' 'Addon Modules'. '' Afterwards, find '' 'Product Linker' '' and press '' 'Activate' '' button.
+
Log in to your WHMCS admin area. Go to '' 'System Settings' '' → '' 'Addon Modules'. '' Afterward, find '' 'Product Linker' '' and press the '' 'Activate' '' button.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_5.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_3.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''7. In the next step you need to permit access to this module.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''7. In the next step, you need to permit access to this module.'''<br />
To do so, click on '' 'Configure' '' button, select administrator groups which should have access to this addon and press '' 'Save Changes'. ''
+
To do so, click on the '' 'Configure' '' button, select administrator groups that should have access to this addon and press '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_6.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_4.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''8. To enable logs from failed actions, go to '' 'Utilities' '' → '' 'Logs' '' → '' 'Module Log'. '' '''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''8. Optionally, set up a cron job, that automatically terminates linked products when the main product is upgraded/downgraded.'''<br/> 5-minute interval is recommended, the cron can be run as often as every minute, but at the cost of increased WHMCS server load.
There, press '' 'Enable Debug Logging'. ''
+
php -q /your_WHMCS/modules/addons/ProductLinker/cron/cron.php queue
|}
+
{|
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_7.png]]
+
 
|}
 
|}
 
{|
 
{|
Line 128: Line 152:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_8.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_5.png]]
 
|}
 
|}
  
Line 135: Line 159:
 
|style="padding: 10px 0px 30px 15px;"|'''Product Linker For WHMCS allows to sell bundles of products through ordering one product with specific product addons and configurable options.'''<br />
 
|style="padding: 10px 0px 30px 15px;"|'''Product Linker For WHMCS allows to sell bundles of products through ordering one product with specific product addons and configurable options.'''<br />
 
It also automatically forwards basic commands from the main product to all child products.<br />
 
It also automatically forwards basic commands from the main product to all child products.<br />
You can define relation between products through product addon or configurable option. You will find more information about it in '' 'Add Relation' '' section.<br />
+
You can define the relationship between products through a product add-on or configurable option.
 
|}
 
|}
 
==Basic Relations==
 
==Basic Relations==
 
{|
 
{|
|style="padding: 10px 0px 20px 15px;"|At '' 'Basic Relations' '' tab you can define links between products through product addons and configurable options.<br />
+
|style="padding: 10px 0px 15px 15px;"|At the '' 'Basic Relations' '' tab you can define links between products through product addons and configurable options.<br />
They will be triggered as soon as your client makes an order for product with product addon/configurable option chosen at the relation.<br />
+
They will be triggered once your client makes an order for a product with the product addon/configurable option chosen at the relation.<br />
Additionally, you can define a promo code added to the order by triggering the relation.
+
Additionally, you can define a discount added to the order by triggering the relation.<br/>
 +
To add a new relation, go to '' 'Relations' '' → '' 'Basic Relations' '' and click on '' 'Add Relation'.''
 
|}
 
|}
===Add Relation===
 
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|To add a new relation, go to '' 'Product Linker' '' → '' 'Basic Relations'. ''<br /> Now, select relation type from '' 'Type' '' dropdown menu, you can choose between relation triggered by product addon or configurable option.<br/>
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_6.png]]
''Note: For '' 'Addon' '' type there is also '' 'Swap Price' '' option available. If you select it, the price of the linked hosting/product will be overwritten with the addon price.''
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_9.png]]
+
|style="padding: 0px 0px 15px 15px;"|To set up a relation:<br/>
 +
*'''Type''' - Choose a relation type from the '' 'Type' '' dropdown menu, selecting either a relation triggered by a product addon or a configurable option.
 +
*'''Addon/Configurable Option''' - Select a product addon or configurable option that will trigger the relation.
 +
*'''Swap Price''' - If you select the '' 'Addon' '' type, you can also enable the '' 'Swap Price' '' option, which will overwrite the price of the linked product with the addon price.
 +
*'''Configurable Option Value''' - if you choose the '' 'Configurable Option' '' relation type, you must also select a specific configurable option.
 +
*'''Linked Product''' - select a child product that will be linked after the relation is triggered. This product should be set to 'hidden' and 'free'.
 +
*'''Promotion''' - optionally, choose a discount that will be added to the order.<br/>'''''Note:''' Keep in mind that only one discount can be assigned to an order, and you can manage discount assignments on the 'Settings' page.''
 +
*'''Copy Custom Fields''' - decide if you want Custom Fields copied from the main product to the linked product.<br/>'''''Note:''' The Custom Fields are copied from the main product, '''not from the addon.'''''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|Next, select product addon or configurable option name from '' 'Product Addon/Configurable Option' '' dropdown menu.<br />
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_7.png]]
If you have chosen '' 'Configurable option' '' relation type, additionally you have to select a configurable option value.
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_10.png]]
+
|style="padding: 0px 0px 20px 15px;"|Added relations can be edited or deleted by using the relative action buttons.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|Finish through selecting child product which will be linked after triggering the relation.<br />
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_8.png]]
Choose a promo code that will be added to the order and save relation through pressing '' 'Add Relation' '' button.<br />
+
''Note: Only one promo code can be assigned to the order, you can specify the assignment of promo code at the '' 'Settings' '' page.''
+
|}
+
{|
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_11.png]]
+
 
|}
 
|}
  
===Edit Relation===
+
==Product Relations==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|Editing relations is quite easy, go to '' 'Basic Relations' '' tab and start making changes.<br />
+
|style="padding: 10px 0px 15px 15px;"|At the '' 'Product Relations' '' tab you can set up a relation linking one product with another.<br />
You can alter one relation or multiple relations simultaneously, the only difference is button used to save changes.<br />
+
To create a new configuration simply click on the '' 'Add Relation' '' button.
If you are making changes in only one relation, press '' 'Save Changes' '' button next to it, otherwise use '' 'Save Changes' '' at the bottom of the page (pointed with a green arrow).
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_12.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_9.png]]
 
|}
 
|}
 
==Product Relations==
 
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|At '' 'Product Relations' '' tab you can set up relation linking one product with another.<br />
+
|style="padding: 0px 0px 15px 15px;"|Provide the following information to create the relation:
To create a new configuration simply choose product which will trigger relation from '' 'Product' '' dropdown menu. Next, select product which will be added from '' 'Linked Product' ''<br /> dropdown menu.
+
*'''Main Product''' - choose a product from the 'Main Product' dropdown menu to trigger the relation.
Optionally, assign promo code and enable configurable option copying (if possible). Press '' 'Add Relation' '' to save relation.
+
*'''Linked Product''' - select a product from the 'Linked Product' dropdown menu that will be added when the relation is triggered. This product should be set to 'hidden' and 'free'.
 +
*'''Promotion''' - optionally, assign a promotion.
 +
*'''Configurable Option Groups''' - select configurable options to transfer values for.<br/>'''''Note:''' Configurable option copying can only be enabled if the configurable option is assigned to both the parent and child products.''
 +
*'''Copy Custom Fields''' - decide if you want Custom Fields copied from the main product to the linked product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_12_1.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_10.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|Our module allows you to enable copying parent's product configurable options to the child product upon ordering them.<br />
+
|style="padding: 0px 0px 20px 15px;"|Created product relations can be edited or deleted by clicking on the respective action buttons.
To enable copying, mark checkbox next to configurable options and press '' 'Save Changes' '' as shown on the screen below.<br />
+
''Note: You can enable configurable option copying only if configurable option is assigned to both products.''
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_12_2.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_11.png]]
 
|}
 
|}
  
Line 198: Line 220:
 
{|
 
{|
 
|style="padding: 10px 0px 15px 15px;"|'' 'Existing Connections' '' tab allows you to view the list of all products ordered by your clients for which relations exist.<br />
 
|style="padding: 10px 0px 15px 15px;"|'' 'Existing Connections' '' tab allows you to view the list of all products ordered by your clients for which relations exist.<br />
You can find all information about the relation, like main product, linked product, their owner or domain used by both products.<br />
+
You can find all the information about a relation, like the main product, linked product, their owner, or domain used by both products.<br/>
You can quickly move to the customer or any of their products by simply clicking on client/product name.
+
If a need arises, you can also delete a connection and optionally terminate the linked product.<br/>
 +
'''''Note:''' Keep in mind that 'Suspend', 'Unsuspend' and 'Terminate' actions performed on the Main Product will be reflected on the Linked Product.''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_13.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_12.png]]
 
|}
 
|}
 +
 +
==Settings==
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|Module also allows you to order records on the list by selected column through pressing on its headline.<br />
+
|style="padding: 10px 0px 15px 15px;"|Due to the assignment of promotions to the relation, a situation may occur where multiple promotions will be assigned to one order.<br/> WHMCS does not support such a situation, therefore only one promotion has to be chosen.
For example, to order by client name, press on '' 'Client Name' '' column header as shown on the following screen.
+
*'''Highest Discount''' - the promotion giving the highest discount to your clients will be chosen in the order form.
 +
*'''Lowest Discount''' - the promotion giving the lowest discount to your clients will be chosen in the order form.
 +
*'''Minimum Reduction Amount''' - if the 'Lowest Discount' is selected, provide the lowest reduction value ''(order subtotal * promotion rate)'' that can be used.<br/> If the promotion value is below the limit, a higher discount will be applied until the provided amount is met or exceeded.
 +
*'''Display Product Info''' - information about the linked product will be visible on the order form when this option is enabled.
 +
<br/>
 +
'''Minimum Reduction Amount Example:'''
 +
<pre>
 +
Client's order qualifies for 3 discounts: 20%, 50% and 80%
 +
We have set the Discount Priority to 'Lowest Discount'
 +
The Minimum Reduction Amount is set to '10'
 +
 
 +
The order subtotal is '36.39'
 +
The reduction is calculated:
 +
36.39 * 20% = 7.28
 +
36.39 * 50% = 18.20
 +
36.39 * 80% = 29.11
 +
 
 +
Since the calculation with the lowest discount did not exceed the 'Minimum Reduction Amount', the next discount (50%) is applied as it does exceed the minimum.
 +
</pre>
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_14.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_13.png]]
 
|}
 
|}
 +
 +
==Queue==
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|You can use filters to display only specific records.<br />
+
|style="padding: 10px 0px 15px 15px;"|The '' 'Queue' '' section is designed to handle product upgrades and downgrades for products that have a relation established.<br/>
To open filters form, press '' 'Toggle Filters'. ''
+
The cron will automatically create tasks to terminate linked products after upgrade/downgrade of the main product.<br/>
 +
If you allow your clients to upgrade/downgrade products that you have created relations for, it is recommended to run a dedicated cron job every 5 minutes:
 +
php -q /your_WHMCS/modules/addons/ProductLinker/cron/cron.php queue
 +
The table below the cron job information will allow you to see the status of each task, see its details, run it manually, or delete it.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_15.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_12_1.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|You are able to set up filtering by client name, both main and linked products and domain.<br />
+
|style="padding: 0px 0px 20px 15px;"|You can delete multiple tasks at once by using the mass action function.
When you select values you desire, click '' 'Filter Results' '' button (red arrow).<br />
+
If you decide to clear filters you have set up earlier, open filters form and press '' 'Clear Filter' '' (green arrow).
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_16.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_12_2.png]]
 
|}
 
|}
 
==Module Logs==
 
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|If there was any trouble with linked products, information about error will be displayed at '' 'Module Logs' '' page.<br />
+
|style="padding: 0px 0px 20px 15px;"|Additional actions include the auto prune system and the ability to hide the cron information.
Error message can be found at '' 'Clean Response' '' and '' 'Parsed Response' '' column.<br />
+
To locate products for which error occurred, you can use data at '' 'Request Parameters' '' column.<br />
+
For example, '' '[accountid]' '' and '' '[domain]' '' should be enough to quickly localize products.<br />
+
''Note: Module also checks if the module log is turned on and provides a link to it.''
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_17.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_12_3.png]]
 
|}
 
|}
 +
 +
==[https://www.docs.modulesgarden.com/Translations_Tool Translations]==
 
{|
 
{|
|style="padding: 0px 0px 30px 15px;"|You can look for the product with details you found in the previous step, but a way faster method is to use a link.<br />
+
|style="padding: 10px 0px 15px 15px;"|Customizing language files is now extremely easy with the '' "Translations" '' tool that is now available directly in the addon.<br.> Its user-friendly design makes managing various language file tweaks a smooth and efficient process. <br/>
All you have to do is enter value of '' '[accountid]' '' in place of account_id in the link below.<br />
+
Prepare translations for the original English files with this handy built-in tool. For specific instructions on how to use this tool please refer to its dedicated article, you will find it [https://www.docs.modulesgarden.com/Translations_Tool here].
your_whmcs/admin/clientsservices.php?id=account_id<br />
+
|}
To confirm if you are looking at right product, check if domain in the product matches domain you found in the error log.
+
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_13_1.png]]
 
|}
 
|}
  
==Settings==
+
==Logs==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|In '' 'Settings' '' section you may manage the promo codes assignment to linked products and add some information to the order form.<br/>
+
|style="padding: 10px 0px 20px 15px;"|The '' 'Logs' '' page stores the history of actions performed by the module.<br/>
Due to assignment of promo codes to the relation, it may happen that multiple promo codes will be assigned to one order form. WHMCS doesn't support such actions, <br/>therefore only one promo code has to be chosen.<br />
+
Use the action buttons to see details or delete each log entry. Multiple logs can be deleted at once by utilizing the mass selection function.
1. '' 'Highest Discount Available' '' - if checked, a promo code giving the highest discount to your clients will be chosen at the order form.<br />
+
2. '' 'Discount Limit' '' - if '' 'Highest Discount Available' '' is disabled, a promo code giving the closest discount to the value provided will be chosen.<br />
+
Discount has to be greater than the value provided.<br />
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_17_1.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_14.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|3. Display Product Info - if this option is selected in '' 'Settings' '' section, there is information visible on the linked product on the order form.
+
|style="padding: 0px 0px 20px 15px;"|Furthermore, the logs feature additional actions. Changing the logs' settings, exporting the logs to a '' '.csv' '' file, and a way to delete specific log types.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_17_2.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_15.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|In the settings you can specify which log types should be recorded, and whether they should be deleted automatically after a specific time.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_16.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|While exporting you will pick a time frame and the log types to export.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_17.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|Here you can decide which log types to delete, you can also specify how old the logs have to be to qualify for deletion. Leave the first field empty to delete all logs.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_18.png]]
 
|}
 
|}
  
==Exemplary Connections==
+
=Client Area=
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|At '' 'Exemplary Connections' '' section we will show you how to set up relations between specific products.<br />
+
|style="padding: 10px 0px 20px 15px;"|When the client orders a product with a relation created for it, the relation will be displayed on the order form, provided the option is enabled in the addon's settings.<br/>
One of the many possibilities is connecting [http://www.docs.modulesgarden.com/CPanel_Manage2_For_WHMCS cPanel Manage2 For WHMCS], [http://www.docs.modulesgarden.com/DirectAdmin_Licenses_For_WHMCS DirectAdmin Licenses For WHMCS] and [http://www.docs.modulesgarden.com/Odin_Key_Administrator_For_WHMCS Odin Key Administrator For WHMCS] with other products.<br />
+
If included in the relations, promotions will be applied based on the settings.
This will allow you to automatically provision ready to use licenses for clients once they order a product of your choice, e.g. a VPS server.<br />
+
''Note: Before following any of exemplary configurations below, make sure that both products you will be using in the configuration are set up correctly.''<br />  
+
''Additionally, product linked to the main product should be set to hidden and free. You will be able to set its price at the product addon.''
+
 
|}
 
|}
===cPanel Extended + cPanel Manage2===
 
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|In these steps we will show you how to link cPanel Manage2 with cPanel Extended through the product addon.<br />
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_19.png]]
 +
|}
 +
 
 +
=Use Cases=
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|'''This section provides scenarios that demonstrate common use cases, along with detailed explanations of how the module’s features can be utilized in real-world situations. '''<br/>
 +
Review the following examples to understand better how the module can be applied in practice.
 +
|}
 +
==Basic Relation: Proxmox VE VPS and cPanel Manage2==
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|'''In these steps, we will show you how to link Proxmox VE VPS with cPanel Manage2 through a product addon.''' <br/>You can also link them using configurable options if you would prefer.<br />
 +
1. First create the product addon which will trigger the relation.<br />
 +
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_21.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|2. Name your addon, there is no need to select a module since the addon will only be used to trigger the relation for the cPanel Manage2 Product to be added.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_21_1.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|3. Make sure you check the '' 'Show on Order' '' checkbox under '' 'Details'.''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_21_2.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|4. It is advised to set up the same billing cycle as in the main product. The price of the addon will effectively be the price of the linked product.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_21_3.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|5. Finally, select the main product which the addon will be available for, in this case, it is '' 'Proxmox VE VPS KVM'.''<br/>
 +
Next, press '' 'Save Changes'. ''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_22.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|6. Now, create a relation at your '' 'Product Linker' '' → '' 'Relations' '' → '' 'Basic Relations'. ''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_23.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|Configure the relation:
 +
*'''Type''' - select '' 'Addon' '' for this example.
 +
*'''Addon''' - select your newly created addon.
 +
*'''Swap Price''' - Leave this option disabled.
 +
*'''Linked Product''' - Select the product that will be added when the relation is triggered.<br/> It should be set to hidden and free. You have indirectly set its price at the product addon configuration.
 +
*'''Promotion''' - include a promotion, if you would like, you can add new promotions under '' 'System Settings' '' → '' 'Payments' '' → '' 'Promotions'.''
 +
*'''Copy Custom Fields''' - Leave disabled unless you want to copy custom fields from the main product to the linked product.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_24.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_25.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|The linked product will be added to the order along with the main product.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_26.png]]
 +
|}
 +
<!--
 +
==cPanel Extended + cPanel Manage2==
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|In these steps, we will show you how to link cPanel Manage2 with cPanel Extended through the product addon.<br />
 
''Note: You can also link them using configurable options.''<br />
 
''Note: You can also link them using configurable options.''<br />
1. Start from creating '' 'IP' '' custom field at the main product visible on order form.<br />
+
1. Start by creating the '' 'IP' '' custom field at the main product visible on the order form.<br />
To do so, go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your cPanel Extended product.
+
To do so, go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your cPanel Extended product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_18.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_20.png]]
 
|}
 
|}
  
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|2. Open '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark '' 'Show on Order Form' '' checkbox.<br />
+
|style="padding: 0px 0px 15px 15px;"|2. Open the '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark the '' 'Show on Order Form' '' checkbox.<br />
Confirm changes through pressing '' 'Save Changes'. ''
+
Confirm changes by pressing '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_19.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_20.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|3. It is time to create a product addon which will trigger the relation.<br />
+
|style="padding: 0px 0px 15px 15px;"|3. It is time to create the product addon which will trigger the relation.<br />
Go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
+
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_20.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_21.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|4. Enter addon name, its description and recurring price. Choose billing cycle from '' 'Billing Cycle' '' dropdown menu.<br />
+
|style="padding: 0px 0px 15px 15px;"|4. Enter the addon name, its description, and recurring price. Choose the billing cycle from the '' 'Billing Cycle' '' dropdown menu.<br />
It is advised to set up the same billing cycle as in the main product. Additionally, you have to mark '' 'Show on Order' '' checkbox and checkbox next to the main product.<br/> In this example it will be '' 'cPanel - cPanel Extended'. ''<br />
+
It is advised to set up the same billing cycle as in the main product. Additionally, you have to mark the'' 'Show on Order' '' checkbox and the checkbox next to the main product.<br/> In this example it will be '' 'cPanel - cPanel Extended'. ''<br />
 
Next, press '' 'Save Changes'. ''
 
Next, press '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_21.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_22.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|5. Now, create relation at your '' 'Product Linker' '' → '' 'Basic Relations'. ''
+
|style="padding: 0px 0px 20px 15px;"|5. Now, create a relation at your '' 'Product Linker' '' → '' 'Basic Relations'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_22.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_23.png]]
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
Do not forget to type the domain and IP address. Afterwards, press '' 'Submit Order'. ''
+
Do not forget to type the domain and IP address. Afterward, press '' 'Submit Order'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_23.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_24.png]]
 
|}
 
|}
 
{|
 
{|
Line 321: Line 450:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_24.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_25.png]]
 
|}
 
|}
 
{|
 
{|
Line 327: Line 456:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_25.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_26.png]]
 
|}
 
|}
  
===DirectAdmin Extended + DirectAdmin Licenses===
+
==DirectAdmin Extended + DirectAdmin Licenses==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|In these steps we will show you linking DirectAdmin Licenses to DirectAdmin Extended through product addon.<br />
+
|style="padding: 10px 0px 15px 15px;"|In these steps, we will show you how to link DirectAdmin Licenses to DirectAdmin Extended through the product addon.<br />
 
''Note: You can also link them using configurable options.''<br />
 
''Note: You can also link them using configurable options.''<br />
1. Start by creating '' 'IP' '' custom field at the main product visible on order form.<br />
+
1. Start by creating the '' 'IP' '' custom field at the main product visible on the order form.<br />
To do so, go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your DirectAdmin Extended product.
+
To do so, go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your DirectAdmin Extended product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_26.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_27.png]]
 
|}
 
|}
  
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|2. Open '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark '' 'Show on Order Form' '' checkbox.<br />
+
|style="padding: 0px 0px 15px 15px;"|2. Open the '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark the '' 'Show on Order Form' '' checkbox.<br />
Confirm changes through pressing '' 'Save Changes'. ''
+
Confirm changes by pressing '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_27.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_28.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|3. It is time to create a product addon which will trigger the relation.<br />
+
|style="padding: 0px 0px 15px 15px;"|3. It is time to create the product addon which will trigger the relation.<br />
Go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
+
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_28.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_29.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|4. Enter addon name, its description and recurring price. Choose a billing cycle from '' 'Billing Cycle' '' dropdown menu.<br />
+
|style="padding: 0px 0px 15px 15px;"|4. Enter the addon name, its description, and a recurring price. Choose a billing cycle from the '' 'Billing Cycle' '' dropdown menu.<br />
It is advised to set up the same billing cycle as in the main product. You also have to mark '' 'Show on Order' '' checkbox and checkbox next to the main product.<br />
+
It is advised to set up the same billing cycle as in the main product. You also have to mark the '' 'Show on Order' '' checkbox and the checkbox next to the main product.<br />
In this example it will be '' 'DirectAdmin - DirectAdmin Extended'. ''<br />
+
In this example, it will be '' 'DirectAdmin - DirectAdmin Extended'. ''<br />
 
Next, press '' 'Save Changes'. ''
 
Next, press '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_29.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_30.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|5. Now, create a relation at your '' 'Product Linker' '' → '' 'Basic Relations'. ''<br/> Note that '' 'Swap Price' '' option has been also marked here. Consequently, the price for the addon will be changed with the price for the linked product/hosting.
+
|style="padding: 0px 0px 15px 15px;"|5. Now, create a relation at your '' 'Product Linker' '' → '' 'Basic Relations'. ''<br/> Note that the '' 'Swap Price' '' option has been also marked here. Consequently, the price for the addon will be changed with the price for the linked product/hosting.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_30.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_31.png]]
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
Do not forget to type in the domain and IP address. Afterwards, press '' 'Submit Order'. ''
+
Do not forget to type in the domain and IP address. Afterward, press '' 'Submit Order'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_31.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_32.png]]
 
|}
 
|}
 
{|
 
{|
Line 381: Line 510:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_32.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_33.png]]
 
|}
 
|}
 
{|
 
{|
Line 387: Line 516:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_33.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_34.png]]
 
|}
 
|}
 
+
==Virtuozzo Hybrid Server + Plesk Key Administrator==
===Virtuozzo VPS + Odin Key Administrator===
+
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|In these steps we will show you how to link Odin Key Administrator with Virtuozzo VPS through a product addon.<br />
+
|style="padding: 10px 0px 15px 15px;"|In these steps, we will show you how to link Odin Key Administrator with Virtuozzo Hybrid Server through a product addon.<br />
 
It is required to set a key type in your '' 'Odin Key Administrator' → 'Module Settings' '' to '' 'VIRTUOZZO'. ''<br />
 
It is required to set a key type in your '' 'Odin Key Administrator' → 'Module Settings' '' to '' 'VIRTUOZZO'. ''<br />
Only in this way a linked product will create a license for Virtuozzo VPS product.<br />
+
Only in this way, a linked product will create a license for a Virtuozzo VPS product.<br />
 
''Note 1: You can also link these products using configurable options.''<br />
 
''Note 1: You can also link these products using configurable options.''<br />
''Note 2: In order to create a license successfully, you have to select at least one feature from a dropdown menu.''
+
''Note 2: In order to create a license successfully, you have to select at least one feature from the dropdown menu.''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_34.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_35.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|1. Start by creating '' 'IP' '' custom field at the main product which will be visible on the order form.<br />
+
|style="padding: 0px 0px 15px 15px;"|1. Start by creating the '' 'IP' '' custom field at the main product which will be visible on the order form.<br />
To do so, go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your VirtuozzoVPS product.
+
To do so, go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your VirtuozzoVPS product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_35.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_36.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|2. Open '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark '' 'Show on Order Form' '' checkbox.<br />
+
|style="padding: 0px 0px 15px 15px;"|2. Open '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark the '' 'Show on Order Form' '' checkbox.<br />
Additionally, you can enter a description of this custom field and set up field validation (it is one line validation, do not split it into two lines):<br />
+
Additionally, you can enter a description of this custom field and set up field validation (it is a one-line validation, do not split it into two lines):<br />
 
  /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)<br />
 
  /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)<br />
 
  \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/<br />
 
  \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/<br />
Confirm changes through pressing '' 'Save Changes'. ''
+
Confirm changes by pressing '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_36.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_37.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|3. It is time to create a product addon which will trigger the relation.<br/>
+
|style="padding: 0px 0px 15px 15px;"|3. It is time to create the product addon which will trigger the relation.<br/>
Go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
+
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_37.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_38.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|4. Enter addon name, its description and recurring price.<br />
+
|style="padding: 0px 0px 15px 15px;"|4. Enter the addon name, its description, and a recurring price.<br />
Choose billing cycle from '' 'Billing Cycle' '' dropdown menu. It is advised to set up the same billing cycle as in the main product.<br />
+
Choose the billing cycle from the '' 'Billing Cycle' '' dropdown menu. It is advised to set up the same billing cycle as in the main product.<br />
Additionally, you have to mark '' 'Show on Order' '' checkbox and checkbox next to the main product. In this example it will be '' 'Odin Group - VirtuozzoVPS'. ''<br />
+
Additionally, you have to mark the '' 'Show on Order' '' checkbox and the checkbox next to the main product. In this example, it will be '' 'Odin Group - VirtuozzoVPS'. ''<br />
 
Next, press '' 'Save Changes'. ''
 
Next, press '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_38.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_39.png]]
 
|}
 
|}
 
{|
 
{|
Line 438: Line 566:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_39.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_40.png]]
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.<br />
Do not forget to type IP address. Afterwards, press '' 'Submit Order'. ''
+
Do not forget to type the IP address. Afterward, press '' 'Submit Order'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_40.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_41.png]]
 
|}
 
|}
 
{|
 
{|
Line 451: Line 579:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_41.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_42.png]]
 
|}
 
|}
 
{|
 
{|
Line 457: Line 585:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_42.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_43.png]]
 
|}
 
|}
  
===Plesk Extended + Odin Key Administrator===
+
 
 +
 
 +
==Plesk Extended + Plesk Key Administrator==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|In these steps we will show you how to link Odin Key Administrator with Plesk Extended through a product addon.<br />
+
|style="padding: 10px 0px 15px 15px;"|In these steps, we will show you how to link Plesk Key Administrator with Plesk Extended through a product addon.<br />
There are a few key types in your Odin Key Administrator that are licenses for Plesk Extended.<br />
+
There are a few key types in your Plesk Key Administrator that are licenses for Plesk Extended.<br />
 
In this example we will use '' 'PLESK_10_AND_LATER' '' key type.<br />
 
In this example we will use '' 'PLESK_10_AND_LATER' '' key type.<br />
 
''Note 1: You can also link these products using configurable options.''<br />
 
''Note 1: You can also link these products using configurable options.''<br />
''Note 2: In order to create a license successfully, you have to select at least one feature from a dropdown menu.''<br />
+
''Note 2: In order to create a license successfully, you have to select at least one feature from the dropdown menu.''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_43.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_44.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|1. Start by creating '' 'IP' '' custom field at the main product which will be visible on the order form.<br />
+
|style="padding: 10px 0px 15px 15px;"|1. Start by creating the '' 'IP' '' custom field at the main product which will be visible on the order form.<br />
Go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your Plesk Extended product.
+
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products/Services' '' and edit your Plesk Extended product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_44.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_45.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|2. Open '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark '' 'Show on Order Form' '' checkbox.<br />
+
|style="padding: 0px 0px 15px 15px;"|2. Open the '' 'Custom Fields' '' tab, enter '' 'IP' '' into '' 'Field Name' '' and mark the '' 'Show on Order Form' '' checkbox.<br />
Additionally, you can enter a description of this custom field and set up field validation (it is one line validation, do not split it into two lines):<br />
+
Additionally, you can enter a description of this custom field and set up field validation (it is a one-line validation, do not split it into two lines):<br />
 
  /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)<br />
 
  /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)<br />
 
  \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/<br />
 
  \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/<br />
Confirm changes through pressing '' 'Save Changes'. ''
+
Confirm changes by pressing '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_45.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_46.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|3. It is time to create a product addon which will trigger the relation.<br />
+
|style="padding: 0px 0px 15px 15px;"|3. It is time to create the product addon which will trigger the relation.<br />
Go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
+
Go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products Addons' '' and press '' 'Add New Addon'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_46.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_47.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|4. Enter addon name, its description and recurring price.<br />
+
|style="padding: 0px 0px 15px 15px;"|4. Enter an addon name, its description, and a recurring price.<br />
Choose billing cycle from '' 'Billing Cycle' '' dropdown menu. It is advised to set up the same billing cycle as in the main product.<br />
+
Choose the billing cycle from the '' 'Billing Cycle' '' dropdown menu. It is advised to set up the same billing cycle as in the main product.<br />
You also have to mark '' 'Show on Order' '' checkbox and checkbox next to the main product. In this example it will be '' 'Odin Group - Plesk Extended'. ''<br />
+
You also have to mark the '' 'Show on Order' '' checkbox and the checkbox next to the main product. In this example, it will be '' 'Odin Group - Plesk Extended'. ''<br />
 
Next, press '' 'Save Changes'. ''
 
Next, press '' 'Save Changes'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_47.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_48.png]]
 
|}
 
|}
 
{|
 
{|
Line 508: Line 638:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_48.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_49.png]]
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the addon triggering the relation.<br />
 
|style="padding: 0px 0px 15px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the addon triggering the relation.<br />
Do not forget to type IP address. Afterwards, press '' 'Submit Order'. ''
+
Do not forget to type an IP address. Afterward, press '' 'Submit Order'. ''
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_49.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_50.png]]
 
|}
 
|}
 
{|
 
{|
Line 521: Line 651:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_50.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_51.png]]
 
|}
 
|}
 
{|
 
{|
Line 527: Line 657:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_51.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_52.png]]
 
|}
 
|}
==Client Area==
+
-->
 +
 
 +
==Product Relation: Proxmox VE VPS and Plesk Key Administrator==
 
{|
 
{|
|style="padding: 10px 0px 5px 15px;"|At this section we will try to visualize how a client may benefit from the connections made between certain products.<br/>
+
|style="padding: 10px 0px 15px 15px;"|'''In these steps, we will show you how to link independent Proxmox VE VPS and Plesk Key Administrator products.''' <br/>The linked product will always be added when the main product is ordered.
Let's take a look at an exemplary situation.
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|Administrator has created a connection between a VPS product: '''VPS 2x2.4GHz 16 GB RAM, 1TB HDD'''<br/>
+
|style="padding: 0px 0px 20px 15px;"|Create a relation at your '' 'Product Linker' '' → '' 'Relations'. '' → '' 'Product Relations'.''
and allowed to purchase two addons along with it:<br/>
+
- cPanel License<br/>
+
- Direct Admin License<br/>
+
Our Test Tester client decided to add cPanel License to the cart next to the VPS product.<br/>
+
Thanks to the connection created in Product Linker addon, the final price is lower than as if the two items were ordered separately.
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:PL2_52.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_27.png]]
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|When items are activated, client may see their pricing on the products list.
+
|style="padding: 0px 0px 15px 15px;"|Configure the relation:
 +
*'''Main Product''' - select the main product which will trigger the relation on its own.
 +
*'''Linked Product''' - Select the product that will be added when the relation is triggered.<br/>It should be set to hidden and free. You can indirectly set its price by balancing the main product price and the promotion.
 +
*'''Promotion''' - include a promotion, if you would like, you can add new promotions under '' 'System Settings' '' → '' 'Payments' '' → '' 'Promotions'.''
 +
*'''Copy Custom Fields''' - Leave disabled unless you want to copy custom fields from the main product to the linked product.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:PL2_53.png]]
+
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_28.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:PL3_29.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|The linked product will be added to the order along with the main product.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:PL3_30.png]]
 
|}
 
|}
  
Line 557: Line 699:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 15px;"|2. If your client orders product configurable options upgrade/downgrade, old linked product bound by previous configurable option will stay active.<br />
+
|style="padding: 0px 0px 5px 15px;"|2. If your client orders a product configurable options upgrade/downgrade, the old linked product bound by a previous configurable option will stay active.<br /> You need to remove the link between the old linked product and the main product in the addon and terminate the old linked product manually.
:You need to remove the link between an old linked product and a main product in an addon, and terminate old linked product manually.
+
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 15px;"|3. If a child product is at the same time a parent product in the other relation, changes made on its parent will be also commanded on its child.''
+
|style="padding: 0px 0px 10px 15px;"|3. If a child product is at the same time a parent product in the other relation, changes made on its parent will be also commanded on its child.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 15px;"|4. Keep in mind that the second product, linked by the module, is never visible in the cart. It is automatically added once the first one is activated.
+
|style="padding: 0px 0px 30px 15px;"|4. Keep in mind that the second product, linked by the module, is never visible in the cart. It is automatically added once the first one is ordered.
 +
|}
 +
 
 +
=Update Instructions=
 +
{|
 +
|style="padding: 10px 0px 5px 15px;"|An essential guidance through the process of updating the module is offered '''[https://www.docs.modulesgarden.com/How_To_Update_WHMCS_Module here]'''.<br/>
 +
Ensure successful completion of the module update by carefully following each step, thereby preventing data loss or any unforeseen issues.<br/> Additionally, you will find a current list of supplementary actions necessary for a smooth update process there.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 15px;"|'''1. Data migration to version 2.0.0 is handled automatically upon module activation.''' <br/>
 +
 
 +
* '''Download the latest version of the module''' from our [https://www.modulesgarden.com/client-area/products client area].
 +
* '''Remove the old module's files''' from the WHMCS root directory.<br/>'''''Note:''' The module folder name has been changed from 'productlinker' to 'ProductLinker'. Ensure that the old 'productlinker' folder is deleted completely.''
 +
* '''Upload and extract the new files''' into your WHMCS root directory.
 +
* '''Activate the 'Product Linker' addon module.'''
 +
|}
 +
 
 +
=Upgrade Guide=
 +
{|
 +
|style="padding: 10px 0px 30px 15px;"|Seeking a solution that offers greater flexibility, customization tailored to your precise needs, and unrestricted availability?<br/> There is an option that not only proves to be cost-effective in the long run but also includes prioritized support services, making it a truly valuable investment.<br/>
 +
 
 +
Opt for the [https://www.modulesgarden.com/products/whmcs/product-linker#open-source-version Open Source version] of your Product Linker For WHMCS module to unlock these benefits.<br/> Simply click on either the '''Get Source Code''' or '''Upgrade To Lifetime''' button found on the product's page in our client area to complete the one-step upgrade process, with a '''dedicated discount''' already applied.<br/>
 +
 
 +
Follow a [https://www.docs.modulesgarden.com/How_To_Upgrade_WHMCS_Module comprehensive guide] covering the transition process, the advantages it brings, and step-by-step instructions on what to do next after the order has been successfully finalized.  
 
|}
 
|}
  
Line 572: Line 736:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 15px;"|
+
|style="padding: 0px 0px 30px 15px;"|'''2. We do not recommend using Product Linker For WHMCS with the following modules:'''
 +
* Product Free Trial Manager For WHMCS
 +
* Resellers Center For WHMCS<br/>
 +
Integration between these modules is hampered due to specific features of each one of them and their individual workflow.<br/>
 +
We are continually working on eliminating these limitations wherever possible.
 
|}
 
|}

Latest revision as of 12:24, 9 September 2024

Contents

[edit] About Product Linker For WHMCS

Product Linker For WHMCS enables you to establish dynamic connections between products, addons, and configurable options.
This facilitates bundled purchases for customers, supported by flexible discounts.

The module also provides an intuitive interface for viewing, filtering, and managing existing product associations, giving you full control over the active connections used by your clients.

  • Automation Features:
✔ Handle Dependencies Between Module Actions:
✔ Each Create/Terminate/Suspend/Unsuspend Action Performed On Main Product Triggers Such Action On Child Products
✔ Copy Configurable Options From Parent To Child Product
  • Admin Area Features:
✔ Define Relations Between Chosen Products And:
✔ Product Addons
✔ Configurable Options
✔ Linked Products
✔ Define If Product Addon Price Should Be Switched With Linked Product Price
✔ Copy Custom Fields Between Configured Relations
✔ Assign Custom Promo Codes To Relations:
✔ Select Discount Priority
✔ Define Minimum Discount Amount
✔ View, Filter And Delete Existing Connections Between Linked Products
✔ Enable Related Products Notices In Client Cart
✔ View Product Upgrades/Downgrades Tasks Queue
✔ Customize Module Language Files With "Translations" Tool
✔ View And Manage Logs
  • Client Area Features:
✔ Purchase Multiple Products, Addons And Configurable Options By Ordering Just One
✔ View Linked Product Added To Order After Relation Is Triggered
  • General Info:
✔ Integrated With cPanel Manage2 For WHMCS - Easy Reselling Of cPanel Licenses
✔ Integrated With DirectAdmin Licenses For WHMCS - Easy Reselling Of DirectAdmin Licenses
✔ Integrated With Plesk Key Administrator For WHMCS - Easy Reselling Of Plesk Licenses
✔ Multi-Language Support With Custom Translations Tool
✔ Supports PHP 8.2 Back To PHP 8.1
✔ Supports WHMCS Themes "Six" And "Twenty-One"
✔ Supports WHMCS V8.11 Back To WHMCS V8.8
✔ Requires ionCube Loader V13 Or Later
✔ Easy Module Upgrade To Open Source Version

[edit] Installation

This tutorial will show you how to successfully install Product Linker For WHMCS.

We will guide you step by step through the whole installation and configuration process.

1. Log in to our client area and download the module.
PL3 0.png
3. Extract the package and upload its content into the main WHMCS directory.

The content of the package to upload should look like this.

Gfhdr.png
4. When you install Product Linker For WHMCS for the first time you have to rename 'license_RENAME.php' file.

The file is located in 'modules/addons/ProductLinker/license_RENAME.php'. Rename it from 'license_RENAME.php' to 'license.php'.

PL3 1.png
5. In order to configure your license key, you have to edit the previously renamed 'license.php' file.'

Enter your license key between quotation marks as presented on the following screen. You can find your license key in our client area → 'My Products'.

PL4.png
6. Now you have to activate the module in your WHMCS system.

Log in to your WHMCS admin area. Go to 'System Settings' 'Addon Modules'. Afterward, find 'Product Linker' and press the 'Activate' button.

PL3 3.png
7. In the next step, you need to permit access to this module.

To do so, click on the 'Configure' button, select administrator groups that should have access to this addon and press 'Save Changes'.

PL3 4.png
8. Optionally, set up a cron job, that automatically terminates linked products when the main product is upgraded/downgraded.
5-minute interval is recommended, the cron can be run as often as every minute, but at the cost of increased WHMCS server load.
php -q /your_WHMCS/modules/addons/ProductLinker/cron/cron.php queue
9. You have just successfully installed Product Linker For WHMCS!

You can access your module at 'Addons' 'Product Linker'.

PL3 5.png

[edit] Configuration and Management

Product Linker For WHMCS allows to sell bundles of products through ordering one product with specific product addons and configurable options.

It also automatically forwards basic commands from the main product to all child products.
You can define the relationship between products through a product add-on or configurable option.

[edit] Basic Relations

At the 'Basic Relations' tab you can define links between products through product addons and configurable options.

They will be triggered once your client makes an order for a product with the product addon/configurable option chosen at the relation.
Additionally, you can define a discount added to the order by triggering the relation.
To add a new relation, go to 'Relations' 'Basic Relations' and click on 'Add Relation'.

PL3 6.png
To set up a relation:
  • Type - Choose a relation type from the 'Type' dropdown menu, selecting either a relation triggered by a product addon or a configurable option.
  • Addon/Configurable Option - Select a product addon or configurable option that will trigger the relation.
  • Swap Price - If you select the 'Addon' type, you can also enable the 'Swap Price' option, which will overwrite the price of the linked product with the addon price.
  • Configurable Option Value - if you choose the 'Configurable Option' relation type, you must also select a specific configurable option.
  • Linked Product - select a child product that will be linked after the relation is triggered. This product should be set to 'hidden' and 'free'.
  • Promotion - optionally, choose a discount that will be added to the order.
    Note: Keep in mind that only one discount can be assigned to an order, and you can manage discount assignments on the 'Settings' page.
  • Copy Custom Fields - decide if you want Custom Fields copied from the main product to the linked product.
    Note: The Custom Fields are copied from the main product, not from the addon.
PL3 7.png
Added relations can be edited or deleted by using the relative action buttons.
PL3 8.png

[edit] Product Relations

At the 'Product Relations' tab you can set up a relation linking one product with another.

To create a new configuration simply click on the 'Add Relation' button.

PL3 9.png
Provide the following information to create the relation:
  • Main Product - choose a product from the 'Main Product' dropdown menu to trigger the relation.
  • Linked Product - select a product from the 'Linked Product' dropdown menu that will be added when the relation is triggered. This product should be set to 'hidden' and 'free'.
  • Promotion - optionally, assign a promotion.
  • Configurable Option Groups - select configurable options to transfer values for.
    Note: Configurable option copying can only be enabled if the configurable option is assigned to both the parent and child products.
  • Copy Custom Fields - decide if you want Custom Fields copied from the main product to the linked product.
PL3 10.png
Created product relations can be edited or deleted by clicking on the respective action buttons.
PL3 11.png

[edit] Existing Connections

'Existing Connections' tab allows you to view the list of all products ordered by your clients for which relations exist.

You can find all the information about a relation, like the main product, linked product, their owner, or domain used by both products.
If a need arises, you can also delete a connection and optionally terminate the linked product.
Note: Keep in mind that 'Suspend', 'Unsuspend' and 'Terminate' actions performed on the Main Product will be reflected on the Linked Product.

PL3 12.png

[edit] Settings

Due to the assignment of promotions to the relation, a situation may occur where multiple promotions will be assigned to one order.
WHMCS does not support such a situation, therefore only one promotion has to be chosen.
  • Highest Discount - the promotion giving the highest discount to your clients will be chosen in the order form.
  • Lowest Discount - the promotion giving the lowest discount to your clients will be chosen in the order form.
  • Minimum Reduction Amount - if the 'Lowest Discount' is selected, provide the lowest reduction value (order subtotal * promotion rate) that can be used.
    If the promotion value is below the limit, a higher discount will be applied until the provided amount is met or exceeded.
  • Display Product Info - information about the linked product will be visible on the order form when this option is enabled.


Minimum Reduction Amount Example:

 Client's order qualifies for 3 discounts: 20%, 50% and 80%
 We have set the Discount Priority to 'Lowest Discount'
 The Minimum Reduction Amount is set to '10'

 The order subtotal is '36.39'
 The reduction is calculated:
 36.39 * 20% = 7.28
 36.39 * 50% = 18.20
 36.39 * 80% = 29.11

 Since the calculation with the lowest discount did not exceed the 'Minimum Reduction Amount', the next discount (50%) is applied as it does exceed the minimum.
PL3 13.png

[edit] Queue

The 'Queue' section is designed to handle product upgrades and downgrades for products that have a relation established.

The cron will automatically create tasks to terminate linked products after upgrade/downgrade of the main product.
If you allow your clients to upgrade/downgrade products that you have created relations for, it is recommended to run a dedicated cron job every 5 minutes:

php -q /your_WHMCS/modules/addons/ProductLinker/cron/cron.php queue

The table below the cron job information will allow you to see the status of each task, see its details, run it manually, or delete it.

PL3 12 1.png
You can delete multiple tasks at once by using the mass action function.
PL3 12 2.png
Additional actions include the auto prune system and the ability to hide the cron information.
PL3 12 3.png

[edit] Translations

Customizing language files is now extremely easy with the "Translations" tool that is now available directly in the addon.
Its user-friendly design makes managing various language file tweaks a smooth and efficient process.

Prepare translations for the original English files with this handy built-in tool. For specific instructions on how to use this tool please refer to its dedicated article, you will find it here.

PL3 13 1.png

[edit] Logs

The 'Logs' page stores the history of actions performed by the module.

Use the action buttons to see details or delete each log entry. Multiple logs can be deleted at once by utilizing the mass selection function.

PL3 14.png
Furthermore, the logs feature additional actions. Changing the logs' settings, exporting the logs to a '.csv' file, and a way to delete specific log types.
PL3 15.png
In the settings you can specify which log types should be recorded, and whether they should be deleted automatically after a specific time.
PL3 16.png
While exporting you will pick a time frame and the log types to export.
PL3 17.png
Here you can decide which log types to delete, you can also specify how old the logs have to be to qualify for deletion. Leave the first field empty to delete all logs.
PL3 18.png

[edit] Client Area

When the client orders a product with a relation created for it, the relation will be displayed on the order form, provided the option is enabled in the addon's settings.

If included in the relations, promotions will be applied based on the settings.

PL3 19.png

[edit] Use Cases

This section provides scenarios that demonstrate common use cases, along with detailed explanations of how the module’s features can be utilized in real-world situations.

Review the following examples to understand better how the module can be applied in practice.

[edit] Basic Relation: Proxmox VE VPS and cPanel Manage2

In these steps, we will show you how to link Proxmox VE VPS with cPanel Manage2 through a product addon.
You can also link them using configurable options if you would prefer.

1. First create the product addon which will trigger the relation.
Go to 'System Settings' 'Products/Services' 'Products Addons' and press 'Add New Addon'.

PL3 21.png
2. Name your addon, there is no need to select a module since the addon will only be used to trigger the relation for the cPanel Manage2 Product to be added.
PL3 21 1.png
3. Make sure you check the 'Show on Order' checkbox under 'Details'.
PL3 21 2.png
4. It is advised to set up the same billing cycle as in the main product. The price of the addon will effectively be the price of the linked product.
PL3 21 3.png
5. Finally, select the main product which the addon will be available for, in this case, it is 'Proxmox VE VPS KVM'.

Next, press 'Save Changes'.

PL3 22.png
6. Now, create a relation at your 'Product Linker' 'Relations' 'Basic Relations'.
PL3 23.png
Configure the relation:
  • Type - select 'Addon' for this example.
  • Addon - select your newly created addon.
  • Swap Price - Leave this option disabled.
  • Linked Product - Select the product that will be added when the relation is triggered.
    It should be set to hidden and free. You have indirectly set its price at the product addon configuration.
  • Promotion - include a promotion, if you would like, you can add new promotions under 'System Settings' 'Payments' 'Promotions'.
  • Copy Custom Fields - Leave disabled unless you want to copy custom fields from the main product to the linked product.
PL3 24.png
To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.
PL3 25.png
The linked product will be added to the order along with the main product.
PL3 26.png

[edit] Product Relation: Proxmox VE VPS and Plesk Key Administrator

In these steps, we will show you how to link independent Proxmox VE VPS and Plesk Key Administrator products.
The linked product will always be added when the main product is ordered.
Create a relation at your 'Product Linker' 'Relations'. 'Product Relations'.
PL3 27.png
Configure the relation:
  • Main Product - select the main product which will trigger the relation on its own.
  • Linked Product - Select the product that will be added when the relation is triggered.
    It should be set to hidden and free. You can indirectly set its price by balancing the main product price and the promotion.
  • Promotion - include a promotion, if you would like, you can add new promotions under 'System Settings' 'Payments' 'Promotions'.
  • Copy Custom Fields - Leave disabled unless you want to copy custom fields from the main product to the linked product.
PL3 28.png
To check if the relation works as it should, place an order from the admin area for the main product with the product addon triggering the relation.
PL3 29.png
The linked product will be added to the order along with the main product.
PL3 30.png

[edit] Tips

1. If your client orders a product with settings triggering two relations with the same product, only one product will be created.
2. If your client orders a product configurable options upgrade/downgrade, the old linked product bound by a previous configurable option will stay active.
You need to remove the link between the old linked product and the main product in the addon and terminate the old linked product manually.
3. If a child product is at the same time a parent product in the other relation, changes made on its parent will be also commanded on its child.
4. Keep in mind that the second product, linked by the module, is never visible in the cart. It is automatically added once the first one is ordered.

[edit] Update Instructions

An essential guidance through the process of updating the module is offered here.

Ensure successful completion of the module update by carefully following each step, thereby preventing data loss or any unforeseen issues.
Additionally, you will find a current list of supplementary actions necessary for a smooth update process there.

1. Data migration to version 2.0.0 is handled automatically upon module activation.
  • Download the latest version of the module from our client area.
  • Remove the old module's files from the WHMCS root directory.
    Note: The module folder name has been changed from 'productlinker' to 'ProductLinker'. Ensure that the old 'productlinker' folder is deleted completely.
  • Upload and extract the new files into your WHMCS root directory.
  • Activate the 'Product Linker' addon module.

[edit] Upgrade Guide

Seeking a solution that offers greater flexibility, customization tailored to your precise needs, and unrestricted availability?
There is an option that not only proves to be cost-effective in the long run but also includes prioritized support services, making it a truly valuable investment.

Opt for the Open Source version of your Product Linker For WHMCS module to unlock these benefits.
Simply click on either the Get Source Code or Upgrade To Lifetime button found on the product's page in our client area to complete the one-step upgrade process, with a dedicated discount already applied.

Follow a comprehensive guide covering the transition process, the advantages it brings, and step-by-step instructions on what to do next after the order has been successfully finalized.

[edit] Common Problems

1. When you have problems with connection, check whether your SELinux or firewall does not block ports.
2. We do not recommend using Product Linker For WHMCS with the following modules:
  • Product Free Trial Manager For WHMCS
  • Resellers Center For WHMCS

Integration between these modules is hampered due to specific features of each one of them and their individual workflow.
We are continually working on eliminating these limitations wherever possible.

Navigation
WHMCS Modules
WHMCS Widgets
Translations
cPanel Modules
General
FAQ
Community
Product Linker For WHMCS