I'm currently developing v2.0 of my personal cms. However, I'm stuck. I strongly feel that my old solution for "tasks" is not very dynamic and must be revisited. Currently I'm looking the whole concept of how to dynamically add tasks and run them.
What I mean by task system
Like always in cms software, there are a lot of content, such as images, dynamic files, database entries, etc. I created my own task system aka. The Parser (sounds evil right?) It is made of two files, one parser-classes and other the triggers with the
$parser = new ParserClasses(); (I hope you understand what I mean.) Some of the features the parser does:
- First turn off the site (after the parser is done, turn it back on)
- Checks for active files (files that don't have parent mysql entry, will be deleted)
- Clears out old cache
- Generates new static cache
- Deals with languages and translation related cache
- and other tasks related to cms management and maintenance
Why do I want to make it more automatic
Basically all plugins and some themes (add-ons in general,) use this task system. But the problem is that it's not very dynamical, because all functions sit in one huge class. This means that the add-on cannot be installed without opening your php editor.
How I was planning to do it
First I would create my own task language, with preset functions to handle files, cache, etc. (very broad example:
GenerateFreshCache('pages')). Now, storing it is the issue.. My ideas are:
- To create tasks-table in mysql database. Then add tasks there, with my task language. Later
while()them from the database and
eval(). (This is a good way, because I can add scheduled times and similar in function, for CRON jobs. Or even categorize the tasks.)
- Add .php files to some folder, where they get loaded. They will probably use the same task language, but don't need to be
eval()'ed. (I'm scared that this would slow down the parser, because so many files are getting included.)
However, I'm not sure about those ideas and I'm hoping someone has already come across this functionality and can give me pointers. All crazy ideas and concepts are welcome, thanks in advance.
Thanks to everyone who replied. I picked the answer, that helped me the most and not "ohh, too much work, use framework". My task systems core is done and working. Took 2-3 days and currently ~600 lines of code and two classes (outer and inner core.) I finally ended up with two mysql tables, one with tasks (task db) and another with combos (multiple tasks combined together for easier run.) Also, added some features so it would be safe to run via ajax (cant really talk about that, top secret^^). There are might be too many loops, handling the tasks parsing, however this makes adding new tasks very very simple.. Just add it to tasks DB and add the task to cron-list-automatic-run-list or run it straight up via the admin panel.