Hi everyone,
Questions:
What do you think about a CMS built with Phoenix to incorporate Ghost CMS and WordPress features?
What template engine would you recommend to let the users edit directly?
How would the plugin system work?
Would you build it as an umbrella app?
Would you add also a graphql api?
Also I want to build this opensource CMS and use it as my personal blog and website.
Is the MIT license a good option here?
Thanks in advance for any suggestions ideas and constructive arguments and opposing arguments.
1 Like
I’ve not used either of these so remember that in my remaining answers. ^.^
Absolutely not EEx, it allows arbitrary code execution. You’d want something like markdown or ReST I’d wager.
If you mean plugins for text rendering then both markdown (via commonmark) and ReST specs have methods for that.
I’m anti-umbrella apps so personally no. ^.^
You’d be surprised how nice it is to make a graphql API for it all and even without exposing it externally just do all the calls purely internal and it cleans up so much. I need to see if absinthe has better ways of handling that now rather than reaching into internals like I am in my old version. ^.^;
I’d use a recent Apache license (Apache2?). It’s basically MIT but it also fixes some patent annoyances because the modern world sucks for that stuff.
2 Likes
Awesome, thanks @OvermindDL1 for answering my questions and adding explanations and explaining your point of view.
1 Like
Sorry I just seen what you wrote .
I wasn’t referring to that. i was referring to plugins like adding new functionality like a map guide or twitter comments and likes. Something like this
Found an old project for a CMS in phoenix called Contento link here Contento: an open source CMS built with Elixir, Phoenix and Postgresql.
There in tha languges rendering engines is mentioned Liquid templates. has anyone worked with them before?
That’s just a pipeline of functions to pass a post through when it’s rendered or so. ^.^
Yes but these custom plugins can be created by the user and plugged in there CMS version.
Sure, can do it like how discourse does for example, that same pattern would work. Could even do dynamic code loading to load in plugins into the system. This is all a good use for GenEvent or whatever replaces it. ^.^
1 Like
It appears that is deprecated https://hexdocs.pm/elixir/GenEvent.html is there any other options?
Can always use the erlang one, or use a library, or just make your own registration and dispatcher on GenServer as it is actually quite trivial to do so for such things.
Allowing users to add plugins wouldn’t make the system vulnerable to attacks, is there any option to isolate the new plugin from the code of the cms to vet it somehow?
Lua is convenient for that, lol.
Looked at it but is is hard to write. Thanks for mentioning it.
1 Like
Lol, glad I’m not the only one. Most people say lua is super easy but I can’t really stand it myself. ^.^;
Most people do like and prefer it though, so it makes a good sandboxed glue.
1 Like
Maybe something like this from mozilla https://mozilla.github.io/nunjucks/
That’s a templating engine, and I’ve not come across an implementation for it for the BEAM yet?
Wouldn’t the implementation be similar to the haml one?
No clue? I’ve not ever looked at haml so I don’t know if it’s sandboxed “safe” or not. Plus it’s not really standardized enough to be useful for a CMS, where something like ReST would be far more common (or really just use HTML templates if security isn’t an issue).
And is someone might want to add dynamic parts? with functions like the well known wordpress loop?
Like this
`<?php `
`if` `( have_posts() ) : `
` ` `while` `( have_posts() ) : the_post(); `
` ` `the_title( ` `'<h2>'` `, ` `'</h2>'` `); `
` ` `the_post_thumbnail(); `
` ` `the_excerpt();`
` ` `endwhile` `; `
`else` `: `
` ` `_e( ` `'Sorry, no posts matched your criteria.'` `, ` `'textdomain'` `); `
`endif` `; `
`?>`
Maybe eex is not bad idea for the start to keep everything simple
Keep it pluggable at the very least, then you could implement any, starting with the unsafe but fast eex. ^.^
1 Like