Content Management System "Ёжик"

Version 2.26.1402

Admin Panel

A fully functional admin panel for managing any website content and settings. It displays view statistics, visitor logs, allows you to create backups, manage users, and more.

Pages

Each website page is a separate file. The system will understand PHP, Markdown, HTML or plain text. The admin panel will allow importing (creating new pages) from Markdown or CSV.

Files

"Ёжик" - is a flat-file system. Everything is stored in files. Any data can be edited in a standard Notepad (or through the Admin Panel). The admin panel also allows you to edit images a little.

Multilingualism

Just like the Admin Panel, pages support multiple language output options. Modules and templates contain "language constants" files. You can create and share your own translations.

Comments

Full commenting with "likes" and moderation is available. The comment module understands Markdown markup. Each comment is stored in a separate file.

Users

The system allows new users to register independently. Roles and permissions are provided for them. Activity is tracked, and the ability to ban unwanted users is also available.

Backups

Create a ZIP archive of your website with one click. All pages deleted through the Admin Panel are automatically saved in a backup for later restoration. This is another advantage of the flat-file system.

Tags

Tags can be added to any page to link content beyond categories. Tags can be grouped. Just like pages, different languages are supported.

Modules

You can define a module output anywhere (either on a page or in a template). The most popular ones have already been created: "Menu," various "Galleries," "Tags" and "Comments" output, and a "Likes" module.

Security

The only "door" into the system. Requests are verified, and if invalid, access is denied. The system doesn't store user passwords. Only hashes are stored, which change with each request.

Self-sufficiency

PHP is a language with great potential. The system doesn't require learning third-party templating engines or frameworks. The only addition is native JavaScript, as it's indispensable.

Customization

You have the right to modify any file in the system to suit your needs. Look for flaws. Share your developments with everyone. The only limitation is not to require payment. You can only politely ask ☺.

"Ёжик" is built on the Albireo Framework.

Slightly customized and heavily redesigned, even before the Albireo CMS appeared.

The main difference from Albireo CMS - "Ёжик" is free., as permitted by the MIT license for the Albireo Framework

MAX doesn't even allow you to fully try out or evaluate the system before purchasing. Just promises that it will be "this way and that way". ☺

Carefully !

On the website of Ukrainian nationalist, all articles (in Russian ☺), since 2014, contain hidden text insulting the Russian nation or the Russian president.


Not a stupid person. I hope he doesn't mean any harm ...

The following features are inherited:

Dream Routing

Any page can have any URL. That is, what is specified in the page file will work that way. There's no need to tweak anything or edit other files: just specify the URL in the page file, and it works right away. Move the file to any folder—it doesn't matter—the page URL won't change until you change it. If a hardcoded page URL isn't enough, use the additional slug-pattern field, which allows you to use regular expressions. Just like in the "large" frameworks.

REST

When routing, you should consider not only the address, but also the HTTP sending method. Browsers only use the POST and GET methods, which means that to edit, for example, using AJAX, you need to use a regular POST request, but place a field with the method name inside it. This is a modern, practically standard, way of working with REST.
"Ёжик" also supports this. For example, there is a page with a form. It sends a regular POST request to this is the same address (URL). The request handler is placed in a file with the same address (URL), we only specify the method.
It doesn't matter which method is used; you can come up with any name ☺.

Smart Cache

Typically a cache has a lifetime. Say, 15 minutes. After this time, the cache becomes outdated and needs to be rebuilt. But in reality, the data in the cache may be perfectly valid, and its lifetime has nothing to do with data expiration. This method of working with cache is used universally, that is, everywhere—evaluation based on its lifetime.
In "Ёжик," everything is different. There is a directory pages, and the system looks at the last change in this directory, and if the requested cache is older, it marks it as invalid.
This means a very simple thing - you don't have to think about the cache as such at all. Change the page content—the cache will automatically rebuild itself. If there are no changes for three years, the cache will work perfectly all this time without updating.

Demo data for the "Ёжик" CMS

To understand whether "Ёжик" is truly good (or unacceptable), take a look at how the demo data is structured. The documentation is there as well.

Installing it on a local server is just a matter of unzipping the files. Once you’ve tried it out, understood how it works, and decided you want to use "Ёжик," simply copy everything to your web host.


I am not addressing questions like "What is the *right* way?" or "Which is *better*?" here. I consider myself a dilettante in many areas. The Internet is vast and the world is amazing—so I seek out information, experiment, and share what I find.
"If you need anything, drop by—I'll lend a hand."

P.S.

I’ve been using Linux Mint for over 15 years. I don’t understand the meaning of terms like "windaus," "free-program," or "there's-a-crack." I wish the same for everyone else. ☺.

The examples use:

Powerful, extensible, and feature-packed frontend toolkit.

The CSS is slightly customized—or heavily stripped down.

About demo data (what is there)

  • Four site sections with distinct color schemes.
  • A hidden (corporate) section with subsections (departments).
  • Multilingual site – "RU" and some "EN" ☺.
  • Various template layouts – headers, footers, and side menus (or layouts without them).
  • Pages with three content types: "Standard," "Markdown," or "Data (template-based)."
  • Modules for menus, breadcrumbs, comments, tags, galleries, etc.
  • Page variations featuring different combinations of modules.
  • "PHP CommonMark" selected as the Markdown parser.
  • Multiple users with varying privileges (permissions).
  • A couple of templates for "Data (via template)" content pages.
  • Utility pages (excluded from the sitemap)—such as 404 pages, as well as those handling POST, AJAX requests, etc.
  • CodeMirror v5 selected as the default page editor in the admin panel.
  • A large number of images in the uploads directory.
  • The ability to quickly generate 1,000 (one thousand) pages for performance testing.

  • All templates include the bs5_lightbox.js script for creating lightboxes, which utilizes the Modal and Carousel plugins from Bootstrap v.5. The stylesheet is compact and located in the custom.css file. A brief guide with explanations and examples is available in the Notebook section.
  • Almost all templates include the JavaScript and CSS from PrismJS v1.29.0 for attractive code formatting within <pre>...</pre> tags.
  • Variable fonts with a reduced character set have been used (to reduce file size).
  • A quick explanation of how I customized Botstrap's CSS. I implemented font loading, trimmed the grid to six, changed the color map, and more.
  • The Menu module is essentially a collector of "page links" with selected parameters. It can be used as a "menu," "most popular," "more in this category," "new posts," or... so on and so forth

Performance measurement

On every page, a small panel in the bottom-left corner displays three parameters
 0.00682 s • 993.28 K • XXL 

  1. the time, PHP spent processing the data
  2. the memory, that PHP used to process data
  3. Bootstrap grid breakpoint label

Memory measurement is performed in the same way as in PHP Debug Bar and differs from the method proposed by MAX in Albireo Framework and Albireo CMS

If you take measurements using the Albireo CMS method, you will get something like this:
 0.00682 s • 662.28 K • XXL 
If you take measurements using the Albireo Framework method, you will get something like this:
 0.00682 s • 331.28 K • XXL 

Keep this in mind when reading articles on the MAX website ☺
and don't forget to disable "debug mode" in the Admin Panel, in the "Site Configuration" tab.

Interested

I work on website development intermittently; it is a hobby of mine. Therefore, to grow the project, there is a strong need for interested and passionate specialists. (especially for JavaScript).

I invite everyone who wishes to join steller21@yandex.ru

You still have our cookies (because you can’t live without them).More info…
0.04766 s • 
731.94 К • 
XXL XL LG MD SM XS