Widgy: Open Source Python/Django CMS Framework
wid.gy
wid.gy
I'm not sure why developers continue to believe that "tree of widgets!" is a good design for a CMS. It's horrendous.
First, most CMS users are end-clients who will have absolutely no clue to handle a drag-and-drop dependent UI, let alone a nested tree of UIs.
Second, it encourages a site structure where the content is stored hierarchically according to display requirements, instead of the actual semantic relationship between elements.
While I'm sure this is very well coded, it continues the long tradition of content management systems built by developers for developers and in such a way only other developers will like or understand.
I agree that this is a poor way to structure a whole site, but there's still a need for a way to produce ad hoc pages.
I also take your point about the tree of widgets thing, but there is always a trade off between conceptual-ease-of-use and power. There are plenty of users who will do just fine with this interface.
I think there are some use cases where the tree structure really shines, where I haven't really seen anything that could really match the power that we give the user. For example, the Form Widget -- users can create their own forms just by dragging and dropping the form input widgets. Now this would be possible without the tree structure, but since we have it in widgy, users are able to intersperse non-form related widgets like text or images and also they can add structure widgets like the Tabs or Accordion widget.
> I also take your point about the tree of widgets thing, but there is always a trade off between conceptual-ease-of-use and power.
We do find that our clients are willing to take a little time to learn the interface in exchange for the ability to have more power.
The classic signs are usually upfront, presenting the product as the holy grail, in this case "The very last CMS framework you will ever need". Anybody with any experience knows that this cannot possibly be anywhere near true, not even if technology stops evolving altogether.
You see this pattern nearly every day on HN. A language, a framework, a design pattern, a database, a methodology.
Our industry is like playground for juvenile fundamentalists who all believe in the One True Tool.
I think the ", like ever" indicates that their tongue was in their cheek when they wrote that.
I think to understand the reason for the above is that those systems appeared before 'tagging' and loose content relationships.
Working with Drupal, I know it can become confusing when you mix the two. Menus,tags or both? What if content should appear in more than one place? It's an area that is can be confusing for site admins and users.
The placement on the RHS is a little awkward, especially if there is scrolling required.
The commit process was confusing for me in trying to publish a page, but I found the CMS more intuitive than something like Joomla, that I feel out the box is a train wreck (it takes a good while to fit the pieces together/learn how to use).
There's scope for better CMSs that's for sure.
Instead of encouraging an open source project, it punches the developers in the stomach.
Is this some kind of fork of Mezzanine, or is there something else going on here? Is this meant to run on top of Mezzanine? In spite of similarity in the admin, reading through the code quickly doesn't seem to reveal any clues (or much of any similarity at all with the other project).
Basically, we made a really good content editor and wanted to get running quickly, so put our content editor in a Mezzanine page type. However, Widgy is a generic tree editor so potentially could be used for the page tree too.
* https://github.com/fusionbox/django-widgy/blob/master/widgy/... - the widgy_mezzanine "contrib" app. It provides a Page subclass that has a WidgyField on it.
* http://docs.wid.gy/en/latest/tutorials/widgy-mezzanine-tutor... - a tutorial for getting started with Mezzanine and widgy.
[edit -- formatting]
A CMS must be able to display the same content in different ways, display content filtered according to relationships, and so on. Not to mention render in other content types than just HTML.
I'm sure this is fine and fun to build pages with though!
Also: the demo is broken… so this is based on what seems to be their main selling points.
That's quite rigid. Good to ask the question: what is a CMS? It's pretty ambiguous.
I tried to publish a simple page from the demo. But I did have problems:
I created a callout, and then created a page. I then tried to add the callout to the page. And save as published. But I was hit with a message: need to commit first? I didn't get that.
I then saved as a draft, and then hit commit. Not sure what was happening.
I then tried to view the page, but got a 'No content' message.
I then added something to the main content of the page. And saved. No change.
I then commited again. But still had the 'no content' message.
I then tried the commit and approve, which seemed to finally publish the page.
Confusion lies in the commit part, or in the publishing process, order of process. Some buttons looked deactivated, but actually you can click on them, like the 'Commit and approve' button. I was a little perplexed.
The demo then reset itself before I could test a form!
All feels slow to me. But then again most online CMSs feel a little like that to me.
It was also quite difficult dumping widgets into areas. A little practice got there, but it wasn't the easiest of things for me to do.
> +1 for having a usable demo to play with off the bat.
Thanks.
The idea behind the versioning system is that for a lot of our clients, the people who are editing the pages are not actually allowed to publish them. Those users will not see a Commit and Approve button, they only have the Commit button. Later, somebody who has full privileges will review the commits (either in the History or in the Review Queue) and decide whether or not to approve those pages.
If you wanted to see the version that you were editing (we call it the working copy), you can click on the preview button located next to the Commit and History buttons. You can even test the form from the preview page and it will still work.
> Confusion lies in the commit part, or in the publishing process, order of process.
I think you are absolutely right that this flow is confusing. We will talk about how to make this flow better and more obvious.
> Some buttons looked deactivated
I opened an issue for that <https://github.com/fusionbox/django-widgy/issues/205>.
With the demo it wasn't intuitive how the above applied to the post, or the creation process. Order mattered, but it wasn't straight forward figuring out the required process. Resulting in frustration.
You speak of a staging area, or some such. But how is the user to know about your version control system, or how it works?
Surely hitting save should be as good a commit? Or the save implies or triggers a commit? If the commit is that important to the publishing process, emblazen it across the bottom with the Save button.
I really just wanted to see how my page looked as early as possible. And be able to see the page before it was published. You should be able to preview content, but make it clear that the status/workflow of the page you are viewing: You could add a banner across an unpublished page with the page status displayed.
I had been working on figuring out a solution such as this. The ability to use this and extend the widgets is really powerful.
Forget what I said earlier. I thought Widgy was a CMS, but it isn't. It's a page editor for a CMS.
In combination with Django CMS 3, this could be awesome. The Django CMS team have put a lot of effort into moving as much of the administration as possible into the front end. Widgy complements this with a slick drag-and-drop interface for adding and rearranging page content.
In contrast, Widgy's interface attempts to be more like a WYSIWYM structural editor. New widgets are created by dragging them from a widget palette. Draggable objects represent their content in some way, and the physical layout of the widgets and dropzones matches the layout of the webpage being designed.
There's an astonishingly large ecosystem of widgets, extensions and additions and having a single point of integration that (mostly) everyone agrees on allows them all to work fairly well together.
There are things that I wish could be improved about the admin - mainly to do with the slightly old-school HTML and CSS behind it - but there are so many points where you can override, replace and extend that the good outweights the bad.
I use this: https://github.com/django-admin-bootstrapped/django-admin-bo...
It seems to work pretty well.
Unfortunately - there is a limit to how much you can alter the admin HTML without this problem. My own admin skins have been CSS only precisely to avoid this.
I am currently trying to learn the ins and outs of generic views with djang-extra-views, so that I can hopefully do as much, but without the restrictions of the admin.
That being said, with an arrogant shitty attitude like this page shows, it will never actually get there.
The most important facet of a CMS's success (or most software) isn't clean dependency injection and scaffolding, it is a strong community and humility.