cms

A modern and lightweight CMS module fit for any Yii project
63 followers

Current version 0.9.0

NordCms is a stand-alone module developed by Nord Software Ltd. This extension provides the core content management system functionality such as multilingual content and in place editing of content to any Yii project. NordCms is licensed under the New BSD License, please see the LICENSE file.

This extension was developed under a period of two weeks and there is definitely still room for improvement here and there. However, I wouldn't have released it to the public unless I was satisfied with it. I will continue working on improving this module in the future as well.

Links

What's included?

  • In place content editing using MarkItUp
  • Custom tags for dynamic content
  • Rendering of nodes as pages and/or widgets
  • Attachments such as images and other files
  • Multilingual content
  • Search engine optimization for pages
  • Support for both internal and external links
  • Email address obfuscation
  • Theme that uses my Bootstrap extension

For more detailed information please read the Usage section.

Setup

Unzip the extension under protected/modules/cms and add the following to your application configuration:

'imports'=>array(
    .....
    'application.modules.cms.CmsModule',
),
'modules'=>array(
    .....
    'cms',
),
'components'=>array(
    .....
    'urlManager'=>array(
        .....
        'rules'=>array(
            .....
            'page/<name>-<id:\d+>.html'=>'cms/node/page', // clean URLs for pages
        ),
    ),
    'cms'=>array(
        'class'=>'cms.components.Cms'
    ),
),

Next you need to create the necessary database tables by running the schema.sql in the data folder.

Configuration

The cms application component supports the following configuration parameters:

'cms'=>array(
    'class'=>'cms.components.Cms'
    // the names of the web users with access to the cms
    'users'=>array('admin'),
    // the langauges enabled for the cms
    'languages'=>array('en_us'=>'English'),
    // the default language
    'defaultLanguage'=>'en_us',
    // the types of files that can uploaded as attachments
    'allowedFileTypes'=>'jpg, gif, png',
    // the maximum allowed filesize for attachments
    'allowedFileSize'=>1024,
    // the path to save the attachments
    'attachmentPath'=>'/files/cms/attachments/',
    // the template to use for node headings
    'headingTemplate'=>'<h1 class="heading">{heading}</h1>',
    // the template to use for widget headings
    'widgetHeadingTemplate'=>'<h3 class="heading">{heading}</h3>',
    // the template to use for page titles
    'pageTitleTemplate'=>'{title} | {appName}',
    // the application layout to use with the cms
    'appLayout'=>'application.views.layouts.main',
    // the name of the error flash message categories
    'flashError'=>'error',
    'flashInfo'=>'info',
    'flashSuccess'=>'success',
    'flashWarning'=>'warning',
),

Please note that this is the component configuration, NOT the module.

Usage

Creating a page

Pages are created by linking to them. To create a page add the following to one of your views:

Yii::app()->cms->createUrl('foo');

What the above code does it creates a node with the name 'foo' (if it doesn't already exist) and returns the URL to that node.

You can also set the following page properties: URL, page title, meta title, meta description, meta keywords.

Creating a block

Blocks are used for displaying Cms content within views and they can be created using the CmsBlock widget. To add a block, add the following code to one of your views:

<?php $this->widget('cms.widgets.CmsBlock',array('name'=>'bar')) ?>

Adding content to a node

If you have permissions to update Cms content an 'Update' link will be displayed below the content. Nodes have a set of properties that can be specified per language:

  • Heading - the main heading
  • Body - the content
  • Stylesheet - stylesheet associated with the content
  • URL - the page URL (page/{url}-{id}.html)
  • Page Title - the page title
  • Breadcrumb - the breadcrumb text
  • Meta Title - the page meta title
  • Meta Description - the page meta description
  • Meta Keywords - the page meta keywords

Please note that the page properties are only used with pages.

It is possible to create relations between nodes by setting the parent. This will help you organize your content and it will also automatically set the correct breadcrumbs.

Editing content

You can use various tags within the body-field:

  • {{heading}} - the main heading
  • {{image:id}} - displays an attached image
  • {{node:name}} - _displays an inline node
  • {{file:id}} - creates a link to an attached file
  • {{email:address}} - creates a mailto link
  • {{name|text}} - creates an internal link
  • {{address|text}} - creates an external link

Please note that you cannot render inline nodes using the block widget.

Using NordCms with Bootstrap

NordCms comes with a theme that can be used with my Bootstrap extension.

To enable the bootstrap theme you first need to download and setup Bootstrap. When you have Bootstrap up and running you need to copy the files in themes/bootstrap/views to you themes/views folder. If you're not familiar with Yii's theming, read more about it here.

What's next?

  • Improving the interface for attachments
  • Further SEO optimization
  • Content revisions ?

Changes

May ?, 2012

  • Release 2.0.0
    • Polished UI using Twitter's Bootstrap
    • Functionality for creating menus
    • Page and blocks as separate models
    • Added page types to distinguish content
    • Database migrations
    • Requires Yii-Bootstrap
    • Changed to use Bootstrap as default
    • Removed themes

Stay tuned for the release!

Dec 15, 2011

  • Initial release

Total 16 comments

#8159 report it
peili at 2012/05/13 05:54pm
Please Fix the Demo

Please Fix the Demo -- Thank you!

#8045 report it
CyberMama at 2012/05/05 07:58am
Demo not working

Demo not working :-(

#7043 report it
oceatoon at 2012/02/21 02:13am
use view files as cmsWidgets

I want to add this into a node {{nodeFile:pathtoview}} which would simply render a view file as part of the nodes render I'm wondering if maybe someone had this running ?

#7017 report it
oceatoon at 2012/02/19 11:10am
multi lingual

Hi Guys Thanks for the great module , it's promissing I was trying to play with internationalisation but as I change locale, the content disapears? it only works when local is empty I set up my 2 languages in the components configs is there something else to set up ? The Admin tool give the Languages to ttranslate which is fine but the front end reacts strangely I noticed the module stops working if sourcemessage and language parameters are used in the config file

could you show us how to use localisation for Node or widget Rendering ? in your demo I see http://www.cniska.net/cmsdemo/index.php/languages/default/changeLanguage/language/sw is this a language module ? self Answer : The module uses Yii::app()->language set up programaticaly or from the main config 'language' => 'en_us' The Module will then render the content localised to the active language

#6767 report it
Chris83 at 2012/02/03 10:48am
@qstyler

Yes it definitely would but it's not that simple. Do you have any suggestion on how to achieve this?

#6766 report it
Chris83 at 2012/02/03 10:47am
@morten

The Controller class is not a part of Yii, it's just a class generated by the webapp command. Not everyone uses that command so you cannot rely on that the class actually exists in every application.

#6618 report it
qstyler at 2012/01/22 05:08am
Would be nice...

... to have custom URLs (not page/xxxx) and a good menu manager.

#6602 report it
morten at 2012/01/20 08:01am
CmsController to extend Controller not CController?

Shouldn't the CmsController extends Controller and not CController for it to include changes to the Controller one may have made - for instance doing stuff on init?

CmsController.php line 14

class CmsController extends CController

to

class CmsController extends Controller

Great extention - thanks! :)

#6361 report it
Chris83 at 2012/01/03 02:12am
@rhertogh

Thanks for noticing this issue. I've fixed this and it will be included in the next release.

#6331 report it
rhertogh at 2011/12/30 11:28am
Thanks & tiny bug fix

Hi Chris,

First of all Thanks for this very usefull module.

I uncounted a little bug when using the CmsBlock widget inside an other module. The 'update' link was pointing to /myModule/cms/node/update instead of /cms/node/update

I fixed this by changing line 7 in widgets\views\block.php from

array('cms/node/update', 'id'=>$model->id), array('class'=>'update-link')) ?>

to

array('/cms/node/update', 'id'=>$model->id), array('class'=>'update-link')) ?>

Regards,

Rutger

#6182 report it
tonydspaniard at 2011/12/17 05:09am
Great contribution

I know this is not the right place to say this but I would like to congratulate you and to forward my gratitude for such amazing contribution Chris. Bootstrap, is one of the great new things on the Yii extension repository.

#6181 report it
Chris83 at 2011/12/17 03:01am
@drumaddict

Not as far as I know, but improving the interface for attaching files to nodes is on my TODO list.

#6179 report it
drumaddict at 2011/12/16 04:17pm
MarkitUp Editor-ImageUploader Plugin??

Cool extension!Is there an image uploader plugin for the MarkItUp editor to use instead of just links for images?

#6163 report it
thyseus at 2011/12/16 04:05am
Nice extension!

Nice extension! And since it's from the bootstrap widget's author chances are great that this extension gets even more popular!

There is also a quite similar lightweight cms project by me:

http://code.google.com/p/yay-cms

I could imagine merging all features of my cms into yours and abondoning mine. One good, lightweight cms is enough for the yii community ;)

keep up the good work!

#6151 report it
Chris83 at 2011/12/15 05:27pm
@Sergison

You're right. BootTabs is a new Bootstrap widget. I will update Bootstrap shortly to include this widget. I apologize for the inconvenience.

EDIT: Bootstrap has now been updated. Please use version 0.9.6 or newer together with this extension.

#6150 report it
Sergison at 2011/12/15 04:15pm
The file does not exist in the bootstrap extension

Alias "ext.bootstrap.widgets.BootTabs" is invalid. Make sure it points to an existing PHP file. The file does not exist in the bootstrap extension, but:

<?php $this->widget('ext.bootstrap.widgets.BootTabs',array(
            'tabs'=>$tabs,
        ));  ?>

in the update view.

Leave a comment

Please to leave your comment.

Create extension
Downloads