Snap! Websites
An Open Source CMS System in C++
Each block of data that we manage in Cassandra is 100% an equivalent to an SQL table.
For example, we could create a simple table to manage pages as this one:
page_identifier title body
This table includes a page_identifier that gives you a way to reference this table from another table. Now I write another module that extends a page and gives it a teaser capability. What directly comes to mind (at least to me) is adding the teaser field to the table:
page_identifier title body teaser
This is very good since that way we do not increase the search time ...
The one main reason for Cassandra is speed. However, Cassandra lacks the usual SQL connectivity capabilities (i.e. why we call SQL databases relational.) In other words, an SQL statement can be used to connect many tables together without the need for said data to be otherwise connected is powerful but not available in Cassandra.
In an SQL database, it is customary to extend a table by creating a new table and having a one to one connection. For example, a User table is likely to offer a user identifier (user_id) column. You can now create an ...
Note: the feature is defined here: List feature [core]
See also the C-like Expressions.
Many of the entries in a website are lists:
The number of lists is pretty much infinite and is really only limited by the data available on your website and your ...
Whenever you create a page you generate dependencies.
For example, a page may include its own content, the list of the last 3 pages created on your website, the list of the last 5 news feed titles, and the teaser of another page in a box.
These are all called dependencies.
When you change a page's own content, that page is marked as changed and in general we're done.
However, in cases where a page A is referenced in a page B, we need to refresh page B with the new content in page A.
For example, in our prevent example we mentioned the idea of showing a ...
Some people may have an old system that uses a certain number of paths. Say you have an existing static website that is 1,000 pages. Converting it to the new system would take a while and is not a necessity. Instead, you use the new system with a sub-folder in your URL:
http://www.example.org/snapwebsite/...
Here the snapwebsite participates in the website selection (see Website Selector and URL Basics).
There is one huge drawback with this technique: all the files found at the root of a website will still be found at that root. This includes files such as ...
As mentioned on our previous page, it is possible to make use of sub-domains.
For example, you can use a language sub-domain as in http://en.example.com/.
We will support different kind of sub-domains to allow for different website setup.
By default sub-domains are used in the website selection process (see the URL Basics page for detailed information on selecting a website.)
The language example is called a selector. It allows you to select a different set of data within the same website. Some of the parts defined in the ...
We support the HTTP and HTTPS protocols.
At our level, both protocol very look the same since Apache takes care of all the necessary encryption mechanism.
However, there is one flag that tells us whether we are working in secure or non-secure mode and we want to use that flag for the following reasons:
The Core system will be capable of automatically switching between ...
The Snap! Websites system is driven by the URL used to access the site. Everything in the URL may play a role in deciding what is going to be displayed (actually, other Browser parameters may also affect the data returned such as the Browser language, however, only the URL is used to determine which website you are accessing.)
Note: This is fully implemented and works as expected (domain & website determination and full discovery of the website concerned.)
The following URL:
http://en.example.net/0.9/documentation
has the following parts defined in ...
Note: We are moving to using Qt a lot more than boost. Qt offers many of the boost features and it handles XML, XSLT, and a few other things that we're using for Snap! (libQtCassandra, libQtSerialization, etc.)
The boost library is full of goodies. We use it for all sorts of things although we try to limit ourselves to the basics such as shared pointers1
The following includes highly technical documentation informations. This is for developers, not end users. (At this point we do not have a user documentation since the product doesn't exist yet.)
We now have started to really work hard on the development and offer a page with the current development status of Snap! C++.
Snap! Websites
An Open Source CMS System in C++