Snap! Websites
An Open Source CMS System in C++
Each row in the content table is considered an object. All objects are composites meaning that different plugins handle different fields of the object. We do not have a function that load the whole object. Although it could be practical in some cases, we instead let each plugin handles their own data as required. For example, if the robots.txt plugin needs to know whether a page is indexable then it reads the corresponding link. In most other cases, however, that link is ignored because it is not important; i.e. boxes on the side also have that link, but robots.txt does not use it because ...
This is not exactly a feature by itself (it is part of the Filter feature [core]), but I felt like there was a need for a specific page to talk about this feature.
The token replacement feature is a way to speak of the capability for the system to provide a set of variables that can be used as replacement of tokens found in pages.
There is one main reason for making this feature part of core: we want ONE scheme that works for all the plugins in a seamless manner.
The syntax is as follow:
token ::= '[' name ( '(' parameters? [,]? ')' )? ...
This is certainly an extension of the layout.
The idea is pretty simple: support different extensions for the same page and depending on the extension return the content in that specific format (i.e. .html would be considered the default, then you could use .pdf to retrive the page as a PDF file, .prt to get a printer friendly version, .eml to get an email friendly version, etc.)
Using a Book like feature, we can create a whole tree and thus the PDF file can include all the pages of the book.
It should be possible for a page to indicate the format in ...
IMPORTANT NOTE
The Website Status represents the current status (main behavior) of the website. This is quite different from the Status Report feature [core] which attempts to help the user with things he still has to do on his website.
The following are the different statuses that a website can enter depending on various signals such as wether the person just sent us spam or whether the owner of the site changed the current status.
The system offers a taxonomy content type. That one content type includes content pages which define a tag1.
The top tags (parent most) can be considered vocabularies or categories.
Children of those vocabularies are tags or terms. Each gain the full benefit of being a content object with definitions, links, next/previous, parent/child, ...
The URLs found in a page are added to the links table (a specific content type) so we can manage all the links.
We heavily use AJAX to allow immediate editing of all the page content. Pages do not require JavaScript to be read, but any work on a page requires full JavaScript functionality. The code sends POST and at times GET messages to the server to maintain the page as expected and keep the server synchronized.
For example, you are able to log in a page using AJAX so the page doesn't need to be fully refreshed. Similarly, editing the title of a page just requires a click on that title.
We have to think about several side effects of using AJAX:
Main features to support with emails
Under Linux, we can use dlopen() to load a .so file. We will be using that function to load our plugins.
The function takes care of executing the C++ initialization as required (and corresponding destructions on dlclose() calls.)
This means we can create a plugin simply by creating a listener that will receive signals from the other plugins and Snap! core. The listener is created as a global variable which the dlopen() function automatically initializes (and if necessary, the dlclose() will turn it off.)
The dlopen() gives you a choice in loading everything in LAZY mode and making all the ...
At first we may want to go with an editor that's simpler than CKeditor although CK has the great advantage of managing links better than pretty much all the other editors out there. (i.e. you can click in the link, then click the link icon and the editor automatically selects the whole link for you. Other editors simply assume that your selection ability is perfect!)
The editor must have at least the following to be considered complete enough:
Snap! Websites
An Open Source CMS System in C++