197 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
| .. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
 | |
|    :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
 | |
|    :alt: License: LGPL-3
 | |
| 
 | |
| ===================
 | |
| Website Multi Theme
 | |
| ===================
 | |
| 
 | |
| Allow the website admin to set a different theme for each website.
 | |
| 
 | |
| The *theme* might be not just a theme-module, but any set of themes and even
 | |
| particular views from any module (e.g. view ``website.custom_footer`` from
 | |
| ``website`` module). It also means, that *theme* is not just a styling, but
 | |
| a content as well.
 | |
| 
 | |
| How it works
 | |
| ============
 | |
| 
 | |
| Core idea is as following
 | |
| 
 | |
| * Find views created by *theme-module* and mark them as *multi-views* (``website.theme.asset``) additionally to one specified manually via XML (see `demo/themes.xml <demo/themes.xml>`_ as an example). The method `_convert_assets <models/website_theme.py>`_ is responsible for it.
 | |
| 
 | |
| * Set ``active`` to ``False`` for *multi-views*. See method `_find_and_deactivate_views <models/website_theme.py>`_.
 | |
| 
 | |
| * Apply *Multi-theme* (record in new model ``website.theme``) to the specific
 | |
|   website. See method `_multi_theme_activate <models/website.py>`_
 | |
| 
 | |
|   * Make some magic with technical views ``website.assets_frontend`` and ``website.layout``.
 | |
| 
 | |
|     * Duplicate *patterns* from `templates/patterns.xml <templates/patterns.xml>`_
 | |
|     * In ``layout_pattern`` replace ``{theme_view}`` placeholder to a duplicate
 | |
|       of ``assets_pattern``
 | |
|     * Corresponding duplicated *pattern* will be used as a new value for
 | |
|       ``inherit_id`` field in duplicated *multi-views* that originally extend
 | |
|       ``web.assets_frontend``, ``website.assets_frontend`` or
 | |
|       ``website.layout``.
 | |
| 
 | |
|   * Duplicate *multi-views* of the *multi-theme* and its *dependencies* (other
 | |
|     *multi-themes*). In duplicates, the field ``inherit_id`` is changed to other
 | |
|     duplicated views or duplicated *patterns* when possible
 | |
| 
 | |
| Installation
 | |
| ============
 | |
| 
 | |
| To make this module work, you need to either:
 | |
| 
 | |
| * Install any of the officially supported themes:
 | |
| 
 | |
|   * theme_bootswatch
 | |
| 
 | |
| * Install any of the unofficially supported themes (at your own risk):
 | |
| 
 | |
|   * theme_anelusia
 | |
|   * theme_artists
 | |
|   * theme_avantgarde
 | |
|   * theme_beauty
 | |
|   * theme_bewise
 | |
|   * theme_bistro
 | |
|   * theme_bookstore
 | |
|   * theme_clean
 | |
|   * theme_enark
 | |
|   * theme_graphene
 | |
|   * theme_kea
 | |
|   * theme_loftspace
 | |
|   * theme_mongolia
 | |
|   * theme_nano
 | |
|   * theme_notes
 | |
|   * theme_odoo_experts
 | |
|   * theme_orchid
 | |
|   * theme_treehouse
 | |
|   * theme_vehicle
 | |
|   * theme_yes
 | |
|   * theme_zap
 | |
| 
 | |
| Themes in the above lists will become multiwebsite when installed along this
 | |
| module. **If they get installed after ``website_multi_theme``, update this
 | |
| module manually**, or it will not be notified of such change.
 | |
| 
 | |
| Configuration
 | |
| =============
 | |
| 
 | |
| To configure this module, you need to:
 | |
| 
 | |
| #. Go to *Website Admin > Configuration > Settings* and choose or create
 | |
|     a *Website*.
 | |
| #. Press *Advanced > Multiwebsite theme > Reload*.
 | |
| #. In *Advanced > Multiwebsite theme*, pick one of the available themes.
 | |
| #. Via Edit button (``fa-external-link``) add *Default Theme* to *Sub-themes* of
 | |
|    the selected theme to make multi-footer work.
 | |
| 
 | |
| Once you save, any website that has no *Multiwebsite theme* selected will have,
 | |
| the default plain Bootstrap theme, and those that do have one will get it.
 | |
| 
 | |
| Of course, your Odoo instance must be reachable by all of the provided host
 | |
| names, or nobody will ever see the effect. But that is most likely configured
 | |
| through your DNS provider and/or proxy, so it is not a matter of this addon.
 | |
| 
 | |
| If you want to test this behavior, think that ``localhost`` and ``0.0.0.0``
 | |
| are different host names.
 | |
| 
 | |
| Usage
 | |
| =====
 | |
| 
 | |
| To use this module, you need to:
 | |
| 
 | |
| #. Follow the configuration steps.
 | |
| #. Enter any of the websites you modified.
 | |
| 
 | |
| .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
 | |
|    :alt: Try me on Runbot
 | |
|    :target: https://runbot.odoo-community.org/runbot/186/10.0
 | |
| 
 | |
| Development FAQ
 | |
| ===============
 | |
| 
 | |
| How to develop a multiwebsite-ready theme?
 | |
| ------------------------------------------
 | |
| 
 | |
| Check ``demo/themes.xml``. It includes a demo theme that will serve as a
 | |
| template for you. This demo theme turns primary buttons green, so you can test
 | |
| if it is applied or not easily.
 | |
| 
 | |
| How to convert a single-website theme in a multi-website one?
 | |
| -------------------------------------------------------------
 | |
| 
 | |
| Check ``data/themes_bootswatch.xml``. You must do that. You can consider adding
 | |
| the support directly in this addon, given it will just do nothing if the
 | |
| single-website theme addon is not installed (it acts as a soft dependency).
 | |
| 
 | |
| How to get multiwebsite-specific views updated?
 | |
| -----------------------------------------------
 | |
| 
 | |
| This addon is conservative by default, meaning that in production databases
 | |
| views will not be updated if they already were created (except for the ones
 | |
| copied from ``templates/patterns.xml``).
 | |
| 
 | |
| To force your website getting updated views for all views from a base theme
 | |
| that has changed, you should disable the website multi theme (to make the
 | |
| engine remove all views) and then re-enable it again (to recreate them from
 | |
| scratch).
 | |
| 
 | |
| This does not happen in demo or development instances, where views arch is
 | |
| always updated.
 | |
| 
 | |
| How to test on runbot?
 | |
| ----------------------
 | |
| 
 | |
| * Open ``[[ Website ]] >> Configuration >> Settings``
 | |
| * Switch *Website* field from ``Website localhost`` to ``Website 0.0.0.0``
 | |
| * Click *fa-external-link* icon to edit the Website
 | |
| * At **Website Domain** field copy-paste build domain and add something right after the first dot, for example::
 | |
| 
 | |
|       Original domain: 3308093-10-0-28910f.runbot2.odoo-community.org
 | |
|            New domain: 3308093-10-0-28910f.second-website.runbot2.odoo-community.org
 | |
| 
 | |
| * Click ``[Save]`` to save changes at the Website
 | |
| * Now you can use unchanged build domain for website called ``Website localhost`` and updated domain for website called ``Website 0.0.0.0``
 | |
| 
 | |
| Known issues / Roadmap
 | |
| ======================
 | |
| 
 | |
| * Private themes support is not guaranteed.
 | |
| * There is no UI to remove websites. Do it through an odoo shell.
 | |
| * Theme picker should include some kind of thumbnail if possible.
 | |
| * If you install any of the supported themes after installing this addon, you
 | |
|   will have to press *Reload* in the website config wizard to make it notice
 | |
|   the change.
 | |
| * If you install any unsupported theme along with this addon, it would possibly
 | |
|   become the base for all those supported, which can easily lead to weird
 | |
|   situations and errors.
 | |
| 
 | |
| Credits
 | |
| =======
 | |
| 
 | |
| Contributors
 | |
| ------------
 | |
| 
 | |
| * Rafael Blasco <rafael.blasco@tecnativa.com>
 | |
| * Antonio Espinosa <antonio.espinosa@tecnativa.com>
 | |
| * Jairo Llopis <jairo.llopis@tecnativa.com>
 | |
| * Ivan Yelizariev <https://it-projects.info/team/yelizariev>
 | |
| 
 | |
| Maintainer
 | |
| ----------
 | |
| 
 | |
| .. image:: https://odoo-community.org/logo.png
 | |
|    :alt: Odoo Community Association
 | |
|    :target: https://odoo-community.org
 | |
| 
 | |
| This module is maintained by the OCA.
 | |
| 
 | |
| OCA, or the Odoo Community Association, is a nonprofit organization whose
 | |
| mission is to support the collaborative development of Odoo features and
 | |
| promote its widespread use.
 | |
| 
 | |
| To contribute to this module, please visit https://odoo-community.org.
 |