Yii 1.1: ciims

A Fast, Efficient, High Performance CMS built in Yii
42 followers

UPDATE

CiiMS 1.8 has been released. You can read more about the release at on my blog.

For other information about CiiMS, visit my blog at https://www.erianna.com

Interested in a hosted version of CiiMS? Head over to www.ciims.org to signup!


TravisCI

View the latest releases

View Source Code

What is CiiMS?

CiiMS is a high performance CMS blogging platform designed to be easy to use, fun to work with, and easy to develop with. CiiMS is fast, powerful, extendable, and flexible, and is optimized to run with a combination of tools such as Memcache, Redis, APC, and Sphinx - but can run in other configurations. The intent is to have a easy to use CMS platform that runs on Yii that is fast, user friendly, easy to use, effecient and not resource intensive.

Upgrading CiiMS?

See the Upgrading Guide for notes on how to upgrade from one version to another.

The One Rule/Suggestion/Request

Yup, I'm stealing this idea from Syte because I think it is awesome. If you use and love CiiMS create a pull request that modifies this readme and adds a 60x60 avatar image as a link to your site. If you want to a border color that's fine too.

Erianna by Charles R. Portwood II

Demo

Sure thing boss: A demo of CiiMS can be found at:

Site: http://demo.ciims.org
Admin Panel: http://demo.ciims.org/dashboard

You may use the following credentials to login and manage the site.

Email: admin@erianna.com
Pasword: admin

Please note that this demo is not monitored, and is reset at an unspecified interval and at my discretion. Please be nice. If you find a bug please report it via a Github Issue.

Features

  • Based on Yii Framework
  • Installs in under 5 Minutes (Will Install Yii for you too!)
  • Beautiful Default Theme
  • Based in Yii Booster (Twitter Bootstrap)For Easy Development
  • Content Support for both Markdown Extra and Imperavi Redactor (via Yii License)
  • SEO Optimized (Sitemap XML, URL Slugs, SEO Meta Tags)
  • Password Protected Content
  • Site wide and Category Specific RSS Feeds
  • Multiple Content Type Support
  • Interchangeable Caching Systems (Redis, APC, Memcache, Files)
  • Low Memory Footprint
  • Themable
  • Social Integration (Social Signon, Social Sharing)
  • Extendable with custom modules/extensions
  • Beautiful and functional dashboard for managing your content and settings.
  • i18n files provided for translations
  • And a bunch of other things!

Requirements

  • Yii Framework 1.1+ (Consequently Basic Yii Requirements) (The installer and download and install Yii for you automatically if you don't have it installed already).
  • PHP 5.3.7+ (Strong recommend 5.3.27+, or PHP 5.5)
  • MySQL 5.5+
  • mcrypt/crypt library. This is required for bcrpt hashing.

Recommendations

The following extensions/applications are recommended to improve performance.

  • Redis/Memcache
  • ZendOpcache+/APCCAche
  • Sphinx Search Server

Setup Notes and Installation

CiiMS comes with a built in installer which will walk you through the setup process and provide you with information in the event it can't do something. The installer should be fairly straightforward. If you run into issues during the installation, it's most likely a permission issues with /assets, /protected/runtime, or /protected/config. The installer has built in error support, and by default will recommend you make a few directories writable. Any others are most likely a setup issue rather than an issue with the installer.

Please see the installation guide for a full guide on how to install CiiMS.

Support

If you require support at any time, submit a Github issue and I'll look into it as soon as I can.

How Can I Contribute?

  • Unit & Functional Testing (We're currently hooked into TravisCI, but we don't have a lot of tests running at the moment)
  • Help write i18n language files see #5
  • Help provide translations in your native/favorite language
  • Create Dashboard Cards See Instructions
  • Create Beautiful Themes See Instructions

License

MIT LICENSE Copyright (c) 2011-2013 Charles R. Portwood II

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

TL;DR

Free to use, modify, and do whatever the heck you want it so long as maintain this notice and don't sue me. (Though if you make a lot of money off of it, at least let me know.) =)

Total 20 comments

#17187 report it
Fire at 2014/05/11 06:25am
database connection error solution

Hi everyone, inorder to get the installer to work, make sure you have an .htaccess in your webroot. Here is what I used for mine:

Options +FollowSymLinks AddDefaultCharset UTF-8 RewriteEngine on

# remove www
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css SetOutputFilter DEFLATE

ExpiresActive on ExpiresByType image/gif "access plus 1 day" ExpiresByType image/jpeg "access plus 1 day" ExpiresByType image/png "access plus 1 day" ExpiresByType text/css "access plus 1 day" ExpiresByType text/js "access plus 1 day" ExpiresByType text/javascript "access plus 1 day" ExpiresByType application/javascript "access plus 1 day" ExpiresByType application/x-javascript "access plus 1 day" ExpiresDefault "access plus 1 day"

#15629 report it
Charles R. Portwood II at 2013/12/01 05:13pm
could not connect to db

@hajdar,

Sounds like you're using apache without mod_rewrite enabled for your vHost. Make sure that mod_rewrite is enabled and that your vhost has AllowOverride All to enable the .htaccess file.

#15628 report it
hajdar at 2013/12/01 05:09pm
could not connect to db

The cms looks good. I followed the instractions for installation but at the db connect whet my put username, pass, db and host it says:

The requested URL /CiiMS-master/migrate was not found on this server.

what could prevent from migrating the db

#13173 report it
ghastlyy16 at 2013/05/10 09:52am
re:

@charles

I have a form. Same CRUD structure with your Categories in the admin panel. But i want my form to be presented in modal.

#13172 report it
Charles R. Portwood II at 2013/05/10 09:23am
Model in Form

@ghastly,

Can you ask your question in another way? What are your trying to accomplish?

#13169 report it
ghastlyy16 at 2013/05/10 06:21am
modal with form

How can i possible embed the form in the modal and execute action in button click using this bootstrap

#11852 report it
Reza Bagheri at 2013/02/07 11:23am
@Charles R. Portwood II

I dont have any .htaccess file,( i have one , only in framework folder) and mod_rewrit, enabled also!

#11851 report it
Charles R. Portwood II at 2013/02/07 11:02am
Page Not Found

@Reza,

CiiMS doesn't come with a .htaccess file for Apache. Does Apache have mod_rewrite enabled? Did you create a .htaccess file in the root directory of CiiMS?

#11843 report it
Reza Bagheri at 2013/02/07 04:35am
all link got to page not found

I inslalled yiic completely and i see main page:

Blogroll

My First Blog Post ..

ans i see sidebar pabel in left site, menu in top(blog, admin) but when i click on any link(login, admin, ...) I get Error same this(for login):

Not Found : The requested URL /testblog/login was not found on this server.

what can i do?

#11818 report it
Charles R. Portwood II at 2013/02/05 02:46pm
Install

@Web Guru,

I am aware of the Windows install issue, however I haven't had time recently to re-factor it for Windows. It's on my TODO list for CiiMS once I get a Windows box I can throw a LAMP install on.

For the second one. Throttle back your error_reporting so that it doesn't die on E_NOTICE. You can file a bug in Github for throwing an E_NOTICE on that variable if you'd like.

#11817 report it
Web Guru at 2013/02/05 01:57pm
Installation

@Charles R. Portwood II

initial performance testing results looks good. i will do more testing my self, but i need some time

I have started the installation and here is my notes (installing on Windows)

1- in the generated main.php at the end of the yiiPath parameter extra "\" is added and caused the application not to work, i had to remove it manually see below

'yiiPath' => 'C:/installed_cms/UniServer_8_7_3/www/yii/framework/\',

after fixing the above issue the site home page is running fine, but when clicking on "Read More" button an error is generated

URL visited http://localhost:88/yii/demos/ciims/my-first-post

Below is the stack trace The error is at line below i guess findByAttributes returns null so "value" property cannot be read

$key = dirname(FILE) . '/../../themes/' . $theme . '/views/content/' .ContentMetadata::model()->findByAttributes(array('content_id'=>$id, 'key'=>'view'))->value . '.php';

PHP notice
 
Trying to get property of non-object
 
C:\installed_cms\UniServer_8_7_3\www\yii\demos\ciims\protected\controllers\ContentController.php(16)
 
04 {
05 
06     /**
07      * Base filter, allows logged in and non-logged in users to cache the page
08      */
09     public function filters()
10     {
11         $id = Yii::app()->getRequest()->getQuery('id');
12         if ($id != NULL)
13         {
14             $lastModified = Yii::app()->db->createCommand("SELECT UNIX_TIMESTAMP(GREATEST((SELECT IFNULL(MAX(updated),0) FROM content WHERE id = {$id} AND vid = (SELECT MAX(vid) FROM content AS content2 WHERE content2.id = content.id)), (SELECT IFNULL(MAX(updated), 0) FROM comments WHERE content_id = {$id})))")->queryScalar();
15             $theme = Cii::get(Configuration::model()->findByAttributes(array('key'=>'theme'))->value, 'default');
16             $key = dirname(__FILE__) . '/../../themes/' . $theme . '/views/content/' .ContentMetadata::model()->findByAttributes(array('content_id'=>$id, 'key'=>'view'))->value . '.php';
17 
18             if ($key && file_exists($key))
19                 $lastModified = filemtime($key) >= $lastModified ? filemtime($key) : $lastModified;
20 
21             $eTag = $this->id . $this->action->id . $id . Cii::get(Yii::app()->user->id, 0) . $lastModified;
22 
23             return array(
24                 array(
25                     'CHttpCacheFilter + index',
26                     'cacheControl'=>Cii::get(Yii::app()->user->id) == NULL ? 'public' : 'private' .', no-cache, must-revalidate',
27                     'etagSeed'=>$eTag
28                 ),
Stack Trace
#0  
+  C:\installed_cms\UniServer_8_7_3\www\yii\framework\yiilite.php(3378): ContentController->filters()
#1  
+  C:\installed_cms\UniServer_8_7_3\www\yii\framework\yiilite.php(1725): CController->run("index")
#2  
+  C:\installed_cms\UniServer_8_7_3\www\yii\framework\yiilite.php(1645): CWebApplication->runController("content/index/id/1")
#3  
+  C:\installed_cms\UniServer_8_7_3\www\yii\framework\yiilite.php(1170): CWebApplication->processRequest()
#4  C:\installed_cms\UniServer_8_7_3\www\yii\demos\ciims\index.php(18): CApplication->run()
13     exit();
14 }
15 
16 $ciimsConfig = require_once($config);
17 require_once((string)$ciimsConfig['params']['yiiPath'].'yiilite.php');
18 Yii::createWebApplication($config)->run();
#11816 report it
Charles R. Portwood II at 2013/02/05 12:12pm
Site Performance

@Web Guru,

Benchmarking

Yes, I have done benchmarking - but benchmarking is very subjective from a server standpoint. CiiMS can be configured to work with many different PHP configurations and server configurations.

For everything below, my setup is as follows:

  • PHP 5.3.21 + APC, Redis Extension
  • Nginx + SPDY
  • Redis
  • MySQL 5.5
  • Sphinx
  • Ubuntu 12.04 LTS
  • 3GB RAM
  • 1 3 GHZ Virtual Processor

On my own VPS, I've run simulations upwards of 500 users for 10 minutes and didn't see any issues. Additionally, those simulations don't take into account the aggressive caching CiiMS provides. When trying to max out the application, I usually run into issues either at the network layer or at the OS level - simply not having the resources to send the data out. It's not perfect, but I haven't hit an application bottleneck yet under this current configuration.

As I said before though, any benchmark test is going to vary with the server configuration you have setup. A beefier server will run CiiMS better than a slim VPS or shared hosting.

You can see the webpage performance of my personal site running CiiMS in regards to caching and load time. Again, this is very specific to my VPS server configuration and themeage.

  • http://www.webpagetest.org/result/130205_9N_N5V/
  • http://tools.pingdom.com/fpt/#!/esjnv4fxR/https://www.erianna.com

High Traffic.

I normally get about 500 visitors a month to my personal site running CiiMS, so no, I haven't run it on any high traffic sites. That being said I've been running my blog for <= 6 months.

You're more than welcome to run your own simulations and determine if CiiMS will be the right tool for you. It might not be, and that's ok. There's other things that can do the same job. If it is though, I'd like to hear about it. =)

#11814 report it
Web Guru at 2013/02/05 11:06am
performancr

@Charles R. Portwood II

thanks for your feedback

since performance is most important for this cms

have you done any benchmark?

have you used it with high traffic websites?

#11812 report it
Charles R. Portwood II at 2013/02/05 10:48am
PHP 5.3.1+

@Web Guru,

That may be a doc error. I don't recall off the top of my head if there is any PHP 5.3+ specific code in the codebase. Presently the installer checks for PHP 5.1+ and I'm willing to lean towards what is actually in the installer rather than what I wrote for the docs.

Give it a shot. It should work just fine. I personally though have never run it on PHP 5.1+, but I don't see any reason why it wouldn't just work out of the box.

#11805 report it
Web Guru at 2013/02/05 01:42am
PHP 5.3.1+

Why do you require PHP 5.3.1+ ?

#10884 report it
Charles R. Portwood II at 2012/11/29 10:21am
Using Cache

My recommendation would configure your site to use CiiMemCache, and allow APCCache to do bytelevel caching. Currently only the CacheComponent is used, so you can simultaneously use both CiiMemCache and CiiAPCCache at the same time via the config file - but APC will cache bytecode if you have it configured server.

#10874 report it
florin p at 2012/11/29 04:04am
Using cache

Hi,

I've just installed CiiMS in my local, looks very elegant, however isn't clear to me if I should use simultaneously CiiMemCache and CiiApcCache to improve the performance. Can you give me a suggestion? Thanks.

#10745 report it
Charles R. Portwood II at 2012/11/20 08:20pm
Installer Issues

@Michel Bobillier,

While I've tested the items I have created I cannot say whether any changes made by other contributes have been tested - there have been a few changes to the installation script since I last messed with it, so I would have to review it to be certain to see if there are any issues

My recommendation for you is to throttle back your error_reporting level. Given that the installer is meant solely to get you going, and is, for all intensive purposes nothing more than config file creator, there's no reason why you should run PHP in such a way that it crashes on a E_NOTICE.

The install script was meant as a dead simple way to get the app up in running if you didn't want to generate your own config file (which you are more than welcome to do). In the future I'm planning on improving the script, but up until now I haven't had much time to do so. Thank you for the constructive criticism.

#10742 report it
Michel Bobillier (Athos99) at 2012/11/20 04:30pm
Many warning in installation

install.php, line 510. Index 4 doesn't exist

echo '' . ($v[1] ? 'OK' : (isset($v[2]) ? $v[2] : 'Error')) .'';

Replace $v[4] by $v[3]

Impossible to create admin...... table 'user' size of password must be 128 and not 64 set default values for lastname and firstname

Have you test your code ?

#10539 report it
saegeek at 2012/11/03 06:50am
Better categories management needed

Hi, Why do you not use a nested tree as categories management.

This is what i used in my tiny paypal shop :

tiny-paypal-shop extension

Online demo: manyshoes

user: admin

password: admin

and go to "manage menu"

Also i think each "post" should correspond to a language section (in the case of a multilanguage website) (look at CGettextFile

Leave a comment

Please to leave your comment.

Create extension
Downloads
No downloadable files yet