Mecha CMS

Updates.

Six Months Have Passed!

Table of Contents
  1. Core Updates 
  2. Extension Updates 
    1. Link 
    2. Comment 
    3. Panel 
  3. Layout Updates 
    1. Outdoor 
    2. Outdoorsy 

Naming things is hard.

I’m not good at designing layouts because I’m too obsessed with neat source code. Unlike extensions, layouts need to be created with many variations, although in the end, only one will be used by the user. It makes me a little lazy to do it because I have to repeat the same code many times. My style in choosing a name and determining the layout proportion makes it difficult for me to execute design ideas. One term containing two words is quite disturbing to me as if I can replace it with other shorter terms. I even still can’t accept “homepage” and “timeline” as one word. But, on the other hand, I can somehow accept “download” and “upload” as one word.

The process of designing layouts is often delayed and even stopped just because I can’t determine the right HTML class name for each component.

If the term “header” and “footer” are already so familiar, then how can I name the element that will be placed in between the two? How can I name something with a consistent “-er” suffix?

Sure, there are many other terms such as “body”, “content”, and “main” which are suitable to be applied to that element. But all of that is written consistently as a noun with no “-er” suffix at all. This makes the term “header” and “footer” become out of priority considering that we can actually use the term “head” and “foot” as alternative.

Why there must be “button”, “input”, “select” and “textarea”? Why “select”? Why should there be a verb among all the nouns? Why not “selector“ (or even better, “options”)? Why “textarea”? Why isn’t it “text-area”?! 1

English is so weird. Or is it just me? I can accept “Facebook” as one word but not with “Youtube”. When talking about “y-o-u-t-u-b-e” with me, be sure to write it as “YouTube” just how you would write “GitHub” everywhere. Please… please… DO NOT EVER write “Github” right in front of my eyes! 2

Enough updates about me. Let’s talk about the final results of the development during these six months.

Core Updates 

Not much has changed. The only thing you should pay attention to is the new namespace specification for extension and layout. From now on, you should not write extension namespaces with long terms like _\lot\x\extension_name. All extension-specific functions should be written under the x namespace as the root, like so:

<?php

namespace x\extension_name {
    function task_1() { … }
    function task_2() { … }
    function task_3() { … }
}

namespace x {
    function extension_name() { … }
}

This also applies to layout. However, since layout will only be loaded individually, you can omit the layout name part if you want:

<?php

namespace layout\widget() {
    function comments() { … }
    function pages() { … }
    function tags() { … }
}

namespace layout {
    function widget() { … }
}

namespace {
    function layout() { … }
}

Other updates include output changes of URL::long() and URL::short() methods. Relative paths are now recommended to always be prefixed with /, or else, the relative paths will be expanded based on the parent path of current URL. This is a natural behavior that will also happen when you put the same relative path in an anchor and in a form element.

<?php

echo URL::long('foo/bar'); // → https://mecha-cms.com/article/foo/bar
echo URL::long('/foo/bar'); // → https://mecha-cms.com/foo/bar
<?php

Guard::kick('foo/bar'); // May causes infinite redirection :(
Guard::kick('/foo/bar'); // Redirect to https://mecha-cms.com/foo/bar

Extension Updates 

A new core extension, link has been added to help authors get used to creating relative links that will continue to work long term. This extension probably will obsolete block.url and candy extensions in the future.

Comment 

All management-related features in comment extension has been removed. To enable management feature in the comment, install user.comment extension. This extension also includes comment management feature in the front-end which will integrate very well with comment.guard extension. For example, if you mark a particular comment as spam, then the spam “list” in comment.guard extension will be updated as well.

Panel 

Screen captures say a million words.

The page list view now has a Data tab to make it easier for users to manage external data of the parent page.

1

The extension list view allow users to activate/deactivate extensions with one click. Certain buttons will be disabled when current extension is a dependency of other extensions.

2

Added notification badge in comment and trash menu.

3

Users can now reply comments from the control panel interface.

4

An experimental light skin is available.

5

Users can now install panel skin extension and have it as an option, which you can activate/deactivate it through the state manager page.

6

Text field of language state will be converted into options if language extension is installed.

7

Layout Updates 

Two new layouts named Outdoor and Outdoorsy have been added. These are ports of my favorite Blogger template when I was in junior high school.

Outdoor 

8

Outdoorsy 

9

The layouts are not responsive, but those of you who were born between 1992 and 2000 will probably miss them. They also come with simple widget system. You will probably need them to develop other layouts in the future.


  1. This is one reason why I like that fromTextArea, getTextArea, and toTextArea naming decision of CodeMirror 5

  2. But somehow, “Facebook” looks so natural to me that I can’t bear to replace it with “FaceBook”. That’s weird.