Follow us on Twitter X-Cart on Facebook Wiki
Shopping cart software Solutions for online shops and malls
 

Overiding CDev Module css

 
Reply
   X-Cart forums > X-Cart 5 > Dev Questions (X-Cart 5)
 
Thread Tools Search this Thread
  #1  
Old 09-17-2012, 04:17 AM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Overiding CDev Module css

Stumped on this one!

Ok so I create a skin module and replicate the directory structure. In this case mine becomes

CorbyWebWorx/CwwSkin/ProductOptions/View

as I want to override the product_options.css

So I create Product.php too look like this

Code:
namespace XLite\Module\CorbyWebWorx\CwwSkin\ProductOptions\View; /** * Product widget * */ abstract class Product extends \XLite\View\Product\Details\Customer\ACustomer implements \XLite\Base\IDecorator { /** * Register CSS files * * @return array */ public function getCSSFiles() { $list = parent::getCSSFiles(); $list[] = 'modules/CorbyWebWorx/ProductOptions/cww_product_details.css'; return $list; } }

Then add the css file as per the $list variable.

The css file is then called BUT the CDev module css still takes precedence over the overiding css. It doesn't matter whether the css file is named identically you still get the same result. Of course you could edit the css file directly, but thats wrong. There is obviously a simple solution to this, but I can't see it.

Any ideas?
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote
  #2  
Old 09-17-2012, 11:38 PM
  xplorer's Avatar 
xplorer xplorer is offline
 

X-Cart team
  
Join Date: Jul 2004
Posts: 925
 

Default Re: Overiding CDev Module css

Quote:
namespace XLite\Module\CorbyWebWorx\CwwSkin\ProductOptions\V iew;

Your developer ID is "CorbyWebWorx", and your module ID is "CwwSkin". Since XCN loads modules in the alphabet order, "CwwSkin" files get loaded before the original files from "ProductOptions" module.

However, you can force your module to be loaded first by adding "ProductOptions" to the list of modules which you module depends on: in your module's "Main.php" file add "getDependencies()" method as follows:
PHP Code:
public static function getDependencies()
{
    return array(
'CDev\ProductOptions');



Now discard the above because the right way to get what you want is different

If you want to add some custom CSS files to an existing widget, you should find the widget class, "decorate" it in your module and add your custom CSS files by overriding the "getCSSFiles()" method. If you want to drop some existing CSS files, you do the same, but instead of adding new values you look through the array and drop the entries which you don't need anymore.

Does this help?
Reply With Quote
  #3  
Old 09-18-2012, 12:20 AM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Re: Overiding CDev Module css

Yes, I can now figure out what to do I think!

When I have I'll post up how to do more fully.
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote
  #4  
Old 09-18-2012, 01:17 PM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Re: Overiding CDev Module css

Right I figured out how to call the list and created a bit of rough and ready code to remove the item from the list as follows.

Code:
public static function runBuildCacheHandler() { $list = \XLite\Module\CDev\ProductOptions\View\Product::getCSSFiles(); $key = array_search('modules/CDev/ProductOptions/product_details.css', $list); unset($list[$key]); return $list; }

I followed this code through and it appears to call the getCSSFiles() functions from CDev and CWW for a second time, removes product_details.css from the list as expected.

I don't think I'm doing this in the right place as product_details.css is still being called when the page loads.

Changing the Dev ID would be far easier

Could you give me a clue please xplorer?
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote
  #5  
Old 09-18-2012, 11:15 PM
  xplorer's Avatar 
xplorer xplorer is offline
 

X-Cart team
  
Join Date: Jul 2004
Posts: 925
 

Default Re: Overiding CDev Module css

First of all we search throuhg all the files for the widget class that adds the "product_details.css" file.

It is \XLite\Module\CDev\ProductOptions\View\Product. Here is it: https://github.com/litecommerce/core/blob/1.0-master/src/classes/XLite/Module/CDev/ProductOptions/View/Product.php

As you see the class "decorates" \XLite\View\Product\Details\Customer\ACustomer class. "Decoration" means that after the cache rebuild process there will be no ProductOptions\View\Product class anymore, but the changes will be included into the class being decorated. That's why if you want to "decorate" it further, you should extend the base \XLite\View\Product\Details\Customer\ACustomer class, not the ProductOptions\View\Product one.

So, we create a module, specify "Cdev\ProductOptions" in its dependencies, add a new class that decorates the \XLite\View\Product\Details\Customer\ACustomer class and declare getCSSFiles() method that parses the array returned by parent::getCSSFiles() and removes "product_class.css" from the list.
Reply With Quote

The following user thanks xplorer for this useful post:
Cpt.Crashtastic (09-19-2012)
  #6  
Old 09-19-2012, 01:45 AM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Re: Overiding CDev Module css

Quote:
Originally Posted by xplorer
Your developer ID is "CorbyWebWorx", and your module ID is "CwwSkin". Since XCN loads modules in the alphabet order, "CwwSkin" files get loaded before the original files from "ProductOptions" module.

However, you can force your module to be loaded first by adding "ProductOptions" to the list of modules which you module depends on: in your module's "Main.php" file add "getDependencies()" method as follows:
PHP Code:
public static function getDependencies()
{
    return array(
'CDev\ProductOptions');



Now discard the above because the right way to get what you want is different

Thats what threw me. Everything else I had done but I removed the array within the public static function runBuildCacheHandler(). I understand this now

Thankyou very much.
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote
  #7  
Old 09-19-2012, 02:53 AM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Re: Overiding CDev Module css

I have written this up in what is an easy to understand manner

here
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote

The following 3 users thank Cpt.Crashtastic for this useful post:
tony_sologubov (02-13-2013), totaltec (09-19-2012), xplorer (09-19-2012)
  #8  
Old 09-19-2012, 05:46 AM
  xplorer's Avatar 
xplorer xplorer is offline
 

X-Cart team
  
Join Date: Jul 2004
Posts: 925
 

Default Re: Overiding CDev Module css

Quote:
Originally Posted by Cpt.Crashtastic
I have written this up in what is an easy to understand manner

here

Hm, you can replace a CSS file from your skin module.

1. You want to add your custom CSS file to a widget - you decorate the widget and add your file to getCSSFiles()

2. You want to remove an existing CSS file at all - you decorate the widget and parse the parent::getCSSFiles() result

3. You want to replace an existing CSS file with your custom one - you create a skin module and place your modified version of the file inside your skin directory (just make sure that the relative path to the file is exactly the same that the original file has).
Reply With Quote
  #9  
Old 09-19-2012, 08:38 AM
 
Cpt.Crashtastic Cpt.Crashtastic is offline
 

eXpert
  
Join Date: Jan 2006
Posts: 219
 

Default Re: Overiding CDev Module css

Edit : Maybe I didn't understand you correctly. This code was for the skin module.

End Edit

For some reason even though I could get the skin module css to load the CDev was always overiding the ADev modules css. Only way around it I could see as an alternative was to create a tpl with different css id's

3: Do you mean within default/en/modules/ADev

we should have CDev/ProductOptions/product_options.css

I didn't try that. It would be easier. My way worked andI guess it may even have reduced the load as the product_options.css was dropped altogether.
__________________
Xcart 4.4.?
Xcart Next
Litecommerce with Drupal
http://www.corbywebworx.com

Custom Mods, Hosting and Support for Xcart-Next and LiteCommerce
Reply With Quote
  #10  
Old 09-19-2012, 10:55 PM
  xplorer's Avatar 
xplorer xplorer is offline
 

X-Cart team
  
Join Date: Jul 2004
Posts: 925
 

Default Re: Overiding CDev Module css

To completely replace skins/default/en/modules/CDev/ProductOptions/product_details.css file with your custom one, just put your file here: skins/[your-skin-name]/en/modules/CDev/ProductOptions/product_details.css

Just make sure that Product Options module is loaded before yours (add it to your module dependencies).

P.S. although you can replace template files this way, we recommend you to keep as much "default" templates as possible - some of the templates which you replace may be modified in future versions, and the changes won't get into your custom versions of the files during upgrade.
Reply With Quote
Reply
   X-Cart forums > X-Cart 5 > Dev Questions (X-Cart 5)



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -8. The time now is 03:10 PM.

   

 
X-Cart forums © 2001-2020