The Unofficial Selection
KnpLabs is hiring
Symfony2 developers!

Infos

Keywords

themes theming

Score evolution

Score details ( ? )

  • Github Followers: 93
  • Last 30 days activity: 0.2
  • README file size: 5
  • Uses Travis CI: 5
  • Travis CI build status: 5
  • Provides a composer package: 5
  • KnpBundles recommendations: 10

Latest commits

  • updated composer autoload location
    By lsmith77 28 days ago
  • Update README.md
    By lsmith77 1 month ago
  • Merge pull request #39 from Claymm/master
    By lsmith77 1 month ago
  • Added some text into the README.md file in order to hĂȘlp people understanding how to deal with the themes directory structure with a Bundle. I gave an example of how to integrate TwigBundle custom error pages.
    By 1 month ago
  • Merge pull request #35 from COil/master
    By fabian 2 months ago
  • Fixed typo
    By COil 2 months ago
  • Merge pull request #34 from asm89/fix-theme-lookup
    By lsmith77 2 months ago
  • Fixed template lookup in themes directory in app/ directory
    By asm89 2 months ago
  • Merge pull request #32 from Seldaek/master
    By lsmith77 3 months ago
  • Update README.md
    By robocoder 3 months ago
126

LiipThemeBundle by liip

Provides theming support for #Symfony2 Bundles

Theme Bundle

This bundle provides you the possibility to add themes to each bundle. In your bundle directory it will look under Resources/themes/<themename> or fall back to the normal Resources/views if no matching file was found.

Build Status

Installation

Installation is a quick (I promise!) 4 step process:

  1. Download LiipThemeBundle
  2. Configure the Autoloader
  3. Enable the Bundle
  4. Import LiipThemeBundle routing

Step 1: Download LiipThemeBundle

Ultimately, the LiipThemeBundle files should be downloaded to the vendor/bundles/Liip/ThemeBundle directory.

This can be done in several ways, depending on your preference. The first method is the standard Symfony2 method.

Using the vendors script

Add the following lines in your deps file:

[LiipThemeBundle]
    git=git://github.com/liip/LiipThemeBundle.git
    target=bundles/Liip/ThemeBundle

Now, run the vendors script to download the bundle:

$ php bin/vendors install

Using submodules

If you prefer instead to use git submodules, the run the following:

$ git submodule add git://github.com/liip/LiipThemeBundle.git vendor/bundles/Liip/ThemeBundle
$ git submodule update --init

Step 2: Configure the Autoloader

Add the Liip namespace to your autoloader:

<?php
// app/autoload.php

$loader->registerNamespaces(array(
    // ...
    'Liip' => __DIR__.'/../vendor/bundles',
));

Step 3: Enable the bundle

Finally, enable the bundle in the kernel:

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Liip\ThemeBundle\LiipThemeBundle(),
    );
}

Step 4: Import LiipThemeBundle routing files

Now that you have activated and configured the bundle, all that is left to do is import the LiipThemeBundle routing files.

In YAML:

# app/config/routing.yml
liip_theme:
    resource: "@LiipThemeBundle/Resources/config/routing.xml"
    prefix: /theme

Or if you prefer XML:

<!-- app/config/routing.xml -->
<import resource="@LiipThemeBundle/Resources/config/routing.xml" prefix="/theme" />

Configuration

You will have to set your possible themes and the currently active theme. It is required that the active theme is part of the themes list.

# app/config/config.yml
liip_theme:
    themes: ['web', 'tablet', 'phone']
    active_theme: 'web'

Optional

If you want to select the active theme based on a cookie you can add

# app/config/config.yml
liip_theme:
    cookie:
        name: NameOfTheCookie
        lifetime: 31536000 # 1 year in seconds
        path: /
        domain: ~
        secure: false
        http_only: false

It is also possible to automate setting the theme cookie based on the user agent:

# app/config/config.yml
liip_theme:
    autodetect_theme: true

Optionally autodetect_theme can also be set to a DIC service id that implements the Liip\ThemeBundle\Helper\DeviceDetectionInterface interface.

Theme Cascading Order

The following order is applied when checking for templates that live in a bundle, for example @BundleName/Resources/template.html.twig with theme name phone is located at:

  1. Override themes directory: app/Resources/themes/phone/BundleName/template.html.twig
  2. Override view directory: app/Resources/BundleName/views/template.html.twig
  3. Bundle theme directory: src/BundleName/Resources/themes/phone/template.html.twig
  4. Bundle view directory: src/BundleName/Resources/views/template.html.twig

For example, if you want to integrate some TwigBundle custom error pages regarding your theme architecture, you will have to use this directory structure : app/Resources/themes/phone/TwigBundle/Exception/error404.html.twig

The following order is applied when checking for application-wide base templates, for example ::template.html.twig with theme name phone is located at:

  1. Override themes directory: app/Resources/themes/phone/template.html.twig
  2. Override view directory: app/Resources/views/template.html.twig

Change Active Theme

For that matter have a look at the ThemeRequestListener.

If you are early in the request cycle and no template has been rendered you can still change the theme without problems. For this the theme service exists at:

$activeTheme = $container->get('liip_theme.active_theme');
echo $activeTheme->getName();
$activeTheme->setName("phone");

Contribution

Active contribution and patches are very welcome. To keep things in shape we have quite a bunch of unit tests. If you're submitting pull requests please make sure that they are still passing and if you add functionality please take a look at the coverage as well it should be pretty high :)

First initial vendors:

php vendor/vendors.php

This will give you proper results:

phpunit --coverage-html reports
  • 2012-04-23 Saidou Gueye

    Hi. Is it possible to override assets too ? When you change the template files your are likely to make some changes in images and css. You can argue that since I am changing the templates I might change the assets pathes as well . But it would be simpler if I could just override the assets tha same way templates are overriden.
    Thanks

  • 2012-02-07 Charles Kevin

    @Hendrawan In your deps file,specify the version of SensioGeneratorBundle to "version=origin/2.0" then run "php bin/vendors update". You may need to delete your cache files afterwards.

  • 2012-01-11 Hendrawan Kuncoro

    i've follow all step on readme, but i got this error :
    ParameterNotFoundException: You have requested a non-existent parameter "assetic.bundles".