--
You received this message because you are subscribed to the Google Groups "SilverStripe Core Development" group.
To post to this group, send email to silverst...@googlegroups.com.
To unsubscribe from this group, send email to silverstripe-d...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/silverstripe-dev?hl=en.
the interface is pretty good as it is. Have had lots of good feedback
from my clients.
I personally don't like 'front-end' editing too much.
Anyways I think a good thing to achieve would be to separate the cms
ui from the rest, and then splitting it up
so there can be a 'frontend cms' or 'iphone-cms' module...
--
Tim Klein
address: Level 1, 1 Searle Lane, Queenstown
skype: kelptim
email: t...@kelpdesign.com
website: http://www.kelpdesign.com
phone: +64 3 409 2031
mobile: +64 21 234 35 78
---
Check out http://www.page-elements.com/
...
> I really fell in love with the CMS UI (although I head to learn here some things so she does what I want), icm the Sapphire Framework.
> Adding it as a optional layer on top of (for example) BlackCandy so devs can choose to use it or not...
>
> Really, I almost never have to explain something to my clients, because its so logical..
Because we're still in the experimentation phase with this it's difficult to talk in too much detail about this stuff, but I'll make a few general comments:
* The system is, in many ways, good enough. But there are content editing systems out there that are more straightforward than SilverStripe for people making content changes. This can manifest itself as requests like "oh SilverStripe's a good CMS but it's a bit much for my blog. Can you install Wordpress because that's better for blogging". I believe that we *can* improve, and we'd like to try. Maybe I want to have my cake and eat it too, but that's how good software gets made.
* One issue that we run into is when you have a heavily tailored content model, it can be confusing to work out which field in the back-end corresponds to which piece of text on the front-end. Providing an editing interface within the context of the real template can help with this.
* We still want to keep the most successful elements of the CMS. For example, the site tree is a great way of seeing an overview of your site. In fact, the biggest issue with the site tree is that it's not given enough real estate.
* We don't want to let this work distract us from necessary improvements to the core framework. One of the reasons for separating Sapphire and the CMS is to make it easier to have separate groups of people work on each, so that we're not stealing attention from each other.
* Right now, the trunk CMS is still a bit of a work in progress, because the JavaScript refactoring work wasn't 100% finished. So, regardless of which way we go, we have work to do before we have a production-ready CMS.
1. IMHO, your "other things" list is vastly more important to the
project than a CMS UI change.
im talking about the upgrade of older sites, maybe that
will slow things down and im not that sure that many sites will want
to change its current system for other, thinking in the cost for the
change, the new time clients will need to learn new tricks, etc...
This is not the case! Although the 2.x -> 3.x change does give us more of an opportunity to be more aggressive when changes APIs, it is critical that we ensure that there is a clear upgrade patch from 2.4 (or 2.5) to 3.0. Certainly, it will be a bit of a challenge to provide this, but we can't left 2.x users out in the cold. Being perfectly selfish, there are few organisations that would be more harmed by the lack of an upgrade path than SilverStripe itself.
Where it's not an automatic process, we will aim to provide documentation outlining what needs to change in your core code as part of the upgrade.
Thanks,
Sam
I've long been against the idea of this custom CMS without anything
even close to a true compiler, but I realise that there's a massive
amount of baggage tied up in it as well. Leaving very little choice
but to continue to support it. However I think there is a solution.
Firstly decoupling the template engine (which I think Sam mentioned in
an earlier post) from the object model and controllers. Ideally this
would let the developer use a regular php file. This probably won't
have the same decoupled syntax as it is now, but would provide an
option.
I've done something similar to what I'm suggesting in another project
by including an arbitrary template file into the context of an object
function. It then lets you access the $this variable in your
templates.
Once that's done I think it paves the way to true improvements to the
templating. Implementing something like XHP would then be possible
(and awesome) http://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919
Cheers,
Michael
Although I still like our template language, I'm very much in favour of both decoupling and rewriting it to use a proper parser.
-------
Sam Minnée | Chief Technology Officer
SilverStripe
http://silverstripe.com
Phone: +64 4 978 7334
Skype: sam.minnee
Having a choice of CMS interfaces as modules that are separate from
the core framework would be a massive win win. As we all know a 'one
interface fits all' never works, promotion of choice for the site developer
would be a signifiant plus for Silverstripe.
For us being able to sell front end editing, traditional back end editing
or even mobile editing to a customer as merely a choice of module
installation would be brilliant.
Jason
Even if it doesn't necessarily mean that there will be multiple CMS interfaces initially, it will make it a hell of a lot easier to add more should we need to.
On 4/11/2010, at 9:13 PM, Jason Stratford wrote:
> Adding another opinion to the Front End editing issue.
>
> Having a choice of CMS interfaces as modules that are separate from
> the core framework would be a massive win win. As we all know a 'one
> interface fits all' never works, promotion of choice for the site developer
> would be a signifiant plus for Silverstripe.
>
> For us being able to sell front end editing, traditional back end editing
> or even mobile editing to a customer as merely a choice of module
> installation would be brilliant.
>
> Jason
-------
Yeah we're certainly going to factor this feedback into the development of the prototype, as well as use it to judge the prototype once it's ready. Some of these concerns have also been raised internally, and the goal here is to take a high-risk stab at doing something more dramatic.
I think where we're going to end up is having a more fluid relationship between the CMS and the front-end, rather than moving entirely away from a separate system.
It's also very clear that we can't neglect framework improvements. The reason that the initial email focused on the front-end editing component was mainly that this was the only feature that hadn't been discussed previously on ss-dev; most of the potential framework improvements have been discussed on and off for a very long time. ;-)
Cheers,
Sam
You take the jQuery approach of always returning a chainable object.
class Collection extends DataMapper {
function where();
function select();
function innerjoin();
function order();
function limit();
}
each method returns a new Collection object, so at any moment in time
you have a query and lazy loads, when it's iterated.
You can also then create what's known in Rails as scopes, again, this
should always return a DataMapper object, allowing you to chain calls.
$customers->profitable()->female();
class CustomerCollection extends Collection {
function profitable() {
return $this->where("Profitable = 1");
}
function female() {
return $this->where("Gender = 'female'");
}
}
Finally, and I think this is something that would really help the
crazy sql munging that happens in Decorators, I think it's important
to be able to name, selected fields, joins, or conditions.
class CustomerCollection extends Collection {
function profitable() {
return $this->where(array("Profitable" => "Profitable = '1'"));
//This won't be executed.
}
}
This lets you overwrite them easily at a later date before the SQL is
generated/executed.
class CustomerDecorator {
function beforeExecution() {
$this->where(array("Profitable" => "Sum(Profit) > 1000")); //This will be.
}
}
Cheers,
Michael.
It's here - https://github.com/sminnee/sapphire/tree/new-orm - but once we switch the main repo I'll get it off my personal github account and onto the main one.
The class DataList replaces DataObjectSet (actually it inherits DOS for backward compatibility) and provides the kinds of methods that you're describing. It is functional to some extent but is far from complete.
One main new thing that you're recommending is the creation of custom DataList subclasses for particular objects. That seems like a good idea.
One thing that I don't like, however, is the use of WHERE snippets as the argument to where. We probably want to support it for legacy reasons but deprecate it.
Django had a good idea using an map syntax. Well, they used named arguments but we're in PHP land so we'll use a map:
This would return Sarah and Samantha but not Samuel or Barbara.
return $this->where(array(
'Gender' => 'Female',
'Name:StartsWith' => 'S'
));
A major benefit is obviously to protect against SQL injection. But it also provides us with a good place to move the SearchContext functionality to. This would give us a list of everyone called Ted from accounting:
return $this->where(array(
'FirstName' => 'Ted',
'Group.Title' => 'Accounting'
));
Which is why I suggested 'Name:StartsWith' rather than 'Name.StartsWith' - . is for relations and : is for filter types.
I'm offline for a few days (flying to Zürich) but I'll catch up on the discussion when I'm back. Or maybe you'll catch me bored in an airport somewhere. ;-)
Cheers,
Sam
My initial reaction to front-end editing is -1, based on my experience
with Plone. Front-end editing sounds like a great idea, but the UI/UX
issues are insidious. Two of the major issues: 1) how to unobtrusively
indicate that fields are editable without defeating the WYSIWYG; 2)
when the Ajax front-end editing was enabled, editors & admins could no
longer simply select text or click on links in editable fields (the
field would go into edit mode on click).
As well, it was extremely difficult to design templates deviating from
the stock Plone layout that would work with front-end editing. The
flexibility of SS templates is a major strength.
The above notwithstanding, SilverStripe is not Plone (thank
goodness!), and I'm interested in seeing the prototype and being
proved wrong.
I also agree that the backend could use a facelift, but I don't think it needs to be drastic. The simplicity of the interface is part of what I like about silverstripe vs. something like Joomla or Drupal where you've got all kinds of craziness (separate menus, articles, modules, etc). Just my 2 cents.
Mark
Now that I've finally caught up with the dauntingly long thread, I'll throw in my first 2 cents.
On Frontend Editing:
I've been working with the ExpressionEngine CMS for the last 6 months at a job I took on. EE is a backend-style CMS from days long past. However, the company that is responsible for it, EllisLab, released a second CMS product (both are commercial) called MojoMotor that works in frontend editing instead of backend editing. My boss hasn't gotten us a site to use MM on, but from what I hear from the EE community, MM is very much a lighter CMS better suited for smaller sites and that EE is still the big brother of the 2 CMS's. My point is maybe to consider releasing the frontend idea as a separate style CMS. I see frontend editing to be very limiting in flexibility since you have to find ways to manage Users, Files, etc within the context of the frontend. Not impossible, but maybe the job for a different CMS system. And that's where one of the many beauties of SS comes in is that you could create both styles of CMS's as different modules and just drop in the one you prefer. I could see using the lighter frontend editor CMS for smaller site projects.
As for the concern of relating which fields in the backend affect which content on the front, I have a few suggestions based on solutions I've done:
- When I create a new installation of SS, one of the early things I do is alter the labels in the backend for the Title, MetaTitle, and MenuTitle fields since, to the user, it could be hard to keep track of which one affects which area. They all could be the same if the maintainer just enters in the Title and tabs into the Content field. I add a note in parens after each one:
* Page Name (This is the page title in the content area)
* Navigation Label (This is the name of the page as it appears in the navigation)
* Title (This is the title as it appears in the top of the web browser and is used for SEO)
The rest of the fields, I think are pretty self-explanatory.
- Another option is to make a sort of map in one of the CMS tabs for the page entry. I did this for a client who had 7 modules to manage on the frontend of their homepage and so I created a tab with an HTML table in it that mapped out where each module was. One could do this with a prototype layout of a browser window and match each field to each section.
On CMS/Backend Efficiency:
The backend editing does feel a bit sluggish once I launch it on a production server. I think some time should be put into improving the efficiency of this functionality, similar to Apple's improvements to Snow Leopard where there was very little new features for users, but so much was improved under the hood. Also, some UI improvements would be good there. Some ideas, small and large:
- I don't fully understand the load order of the system for each request, but, if this doesn't exist, there should be a "light load" process. Things like the ImageField's iframe rendering don't need the whole system to boot up each time and the Restful Server only needs enough system startup to retrieve the data being requested. Maybe something like a read-only startup process that is more efficient since it won't be making any changes to the data in the system.
- In the SiteTree, create an entry at the bottom of each "branch" that is just "Add A Page" and it somehow brings up a list of possible page types to create. That will give the page creation process a little more context rather than "Select the parent page to create a page under, choose the page type at the top, then click 'Go.'"
- I agree that for things like Blogs and even stores, the site tree model is really inefficient and becomes unmanageable on a blog that's been alive for a few years and receiving frequent posts. I've been mulling over an idea to branch the SiteTree a step below and create 2 branches: a Page which is a static piece of timeless or infrequently changing content, and an Entry which is a piece of content that will have a possibly infinite number of sibling entries. That differentiation may be a little vague as Im still trying to better clarify it, but the major difference comes in the functionality. A Page (as we're familiar with) lives in the site tree in the Left panel of the backend. An Entry will not live in the site tree panel. My idea so far has been to make a repurposed ComplexTableField to edit them in so that they are stacked in short reference and then either a modal window pops up to edit the entry, or the row on the CTF opens down to reveal the Entry's CMS Fields. An entry will also have much fewer fields to edit in the CMS. Many of them will be automatically set in the DO code. There would also be an associated EntryListingPage that you associate the Entry subclass with and it will automatically show the altered CTF on a new tab.
That's all I've got for now. Plus, my writing of this response is cutting into my work hours and I need to hop on that before my boss kills me. More later
Matt
I definitely think that we need an improved alternative to ComplexTableField. However, the problem with dataobject_manager is that it's built on top of subclasses of ComplexTableField. For SilverStripe 3 I'd like to see something rewritten from scratch. One SS3 feature in particular that we can exploit is the new ORM - it's going to make it easier to customise the data that's displayed in a table field without needing to pass dozens of configuration arguments.
Potentially it could be based on the dataobjectmanager - its UI and featureset is certainly very nice - although I would expect a major refactoring to replace its foundations. Also, I don't believe that there are any unit tests for dataobjectmanager yet; unit tests would be necessary before adding such a feature into core. I would suggest waiting until the new ORM is in trunk, or at least working from the new-orm branch after we move to github.
> +1 for a nice dashboard in the cms. i can provide ideas for this part,
> since im working in something for the past weeks, only in wireframes
> for now, because i haven't had the time to fight with LeftAndMain.php
I would say that we look at this in more detail after we establish the overall framework for the SS3 CMS - front-end editing, etc. It would be great to see this kind of feature in the CMS, it's just a question of how it gets implemented. There's a pretty high risk that anything that's created now wouldn't be suitable for SS3 so I would give it.
--
Cheers,
Michael
--
Checkout my new website: http://myachinghead.net
http://wakeless.net
One thing you could do is to separate out a CMS role and a Publish role. So you can get person A to change lots of stuff on the site without the ability to publish and person B, without ever seeing the CMS - being able to publish pages.
Since the DataObjectManager was introduced I used DataObjects a lot for
smaller content-bits like "News" or "Events" etc. This is mostly due to
the fact that the Pages-Tree in the CMS isn't very flexible. It doesn't
properly support custom sorting (eg. by Date), there's no filtering and
it gets really cumbersome to use when having lots and lots of pages.
If I recall correctly, this was already discussed (and partially
implemented) back in the 2.2.x days but as far as I can tell, it never
saw the light of day.
AFAIK making DataObjects "versioned" (i.e. live and draft versions) is
possible with the current system but I think it overcomplicates things.
The user shouldn't have to "save and publish" every single DataObject..
I'd rather go back to a more Page-oriented approach, but the UI should
be fit for the task.
Cheers - Roman
On 11.11.10 07:52, Michael Gall wrote:
> The draft behaviour in Wordpress can be turned off by a wp_config.php define.
>
> Cheers,
>
> Michael
>
> On Thu, Nov 11, 2010 at 5:51 PM, Sam Minn�e <s...@silverstripe.com> wrote:
>> Yea, having a config option that disables the draft functionality might not
>> be a bad idea. Although personally I'd never use it - even wordpress has
>> draft behaviour.
>>
>> Sam Minn�e
I think that the mapping from page to subordinate dataobjects would need to be explicit; following all has-many relationships will get us into trouble.
No, i think the decision to include draft is a site decision, rather than a user decision. Also, permission codes should be kept as rights and not used to encode preferences.
You'll be wanting the cmsworkflow module ;-)
--
Aah, and thus our content versioning system moves from CVS to Subversion ;-). Seems like a good idea. In the current UI, the batch actions could be used to specify a multi-page changeset, with a bit of tweaking to recognise that 'publishing' a page deleted from draft is really a request to delete it from live. It's important, however, that it's still very straightforward to publish a single page and ignore the changeset stuff.
> The other reason that I'm looking at this kind of structure is for detached editing and production environments, whereby a set of changes can be published to a remote SilverStripe installation in an almost-atomic step.
In SilverStripe's current parlance, does this mean that the SiteTree_Live table is sitting in a different server/database than the SiteTree table? This would be a good idea, particularly if template/page-type-code update can be deployed in conjunction with content. Could be tricky to make robust, but worth trying.
> At the moment I think there's a bit of a gap in SilverStripe's access control - you can assign roles (built up of permissions) to users (via groups), but they apply as a kind of global permission and don't have any context. You can apply specific access in context of an item or tree, but that's only read or write - you can't arbitrarily say "Grant groupA the Publisher role to all content under Corporate Finance" or something like that.
Yeah, the relationship between Permissions, Roles, and the CanXXX relationships are a bit of a mess, particularly when you throw subsites into the mix. I would like to refactor this model in the following way:
* we have more permission codes for granular actions, View, Edit, Publish, etc
* let permission codes have a scope - to a specific page, section, subsite, etc, or to the entire application as they are now.
* replace the relationships shown on the Access tab with scoped permissions
* have a better concept of group-permissions - a permission code that implies one or more other permission codes. Right now, we have hard-coded this into admin "ADMIN" - it implies every other permission code - but there's no scope for making more permissions like this without messy core hacks.
* remove the current Role system and replace it with suitable group-permissions
* rename "permission codes" to "rights"
Aah, and thus our content versioning system moves from CVS to Subversion ;-). Seems like a good idea. In the current UI, the batch actions could be used to specify a multi-page changeset, with a bit of tweaking to recognise that 'publishing' a page deleted from draft is really a request to delete it from live. It's important, however, that it's still very straightforward to publish a single page and ignore the changeset stuff.
In SilverStripe's current parlance, does this mean that the SiteTree_Live table is sitting in a different server/database than the SiteTree table? This would be a good idea, particularly if template/page-type-code update can be deployed in conjunction with content. Could be tricky to make robust, but worth trying.
This strikes me as being in danger of becoming too complex. Is this something that's driven by authors' needs or a developers' sense of elegance? We're not building a CMS for ourselves, remember. ;-)
FWIW, in my mind I had assumed that the changeset would be created at publication time rather than when you start editing. This is analogous to svn - you can make whatever changes you liked but the changeset is created (in the server, and given a revision number) when you run svn commit.
-------
Sam Minnée | Chief Technology Officer
SilverStripe
http://silverstripe.com
Phone: +64 4 978 7334
Skype: sam.minnee
--
> The other thing I'd be looking to add is the ability to have multiple changesets open at any one time. By default, a changeset is created as soon as you start editing. In some instances though, you might want to break up a series of edits into discreet changesets, either for publishing purposes (staging one set differently), or having them reviewed separately. Users could then move content between changesets if desired, or according to certain workflow rules or other <insert stuff here>This strikes me as being in danger of becoming too complex. Is this something that's driven by authors' needs or a developers' sense of elegance? We're not building a CMS for ourselves, remember. ;-)
FWIW, in my mind I had assumed that the changeset would be created at publication time rather than when you start editing. This is analogous to svn - you can make whatever changes you liked but the changeset is created (in the server, and given a revision number) when you run svn commit.
> I like the idea of change sets a lot. We service a large financial organisation (unfortunately on another CMS) but one of the things that would smooth the workflow out a lot is the ability to have multiple change sets in play at a time that have different publication schedules and approval processes.
I think that it would be okay if the multiple changesets were active, however, I think that:
* they should be created at the "request publication" point rather than as soon as people start editing, and
* I'm not sure that transferring changes between changesets is necessary.
> Re-visiting earlier comments on the thread though, putting this type of feature into core will make the core much heavier for a lot of people who would have no need of this type of feature. Is this the sort of thing that could be modular?
Right now the workflow functionality is modular but it makes the system very complex. One thing I'm wondering is if we keep the data model a bit more workflow-capable in the default install, and instead just have a simpler UI in the core product.
> It actually grew out of wanting to provide a mechanism to exclusively lock content for a particular user, then lock a series of content items. To make it easier from a code standpoint, having an object representing the changeset up front was easier than figuring out exactly what you had edited from a particular time based on the state of the content in the system (and avoiding the _versions table :D). It also allows for different content types (non-SiteTree but with Versioned patched on) to be included in changesets. The actual objects related to the changeset aren't the content items themselves, but 'pointers' to the content items. Cancelling a changeset simply deletes the changeset object and these objects, which is different from Reverting (which undoes the changes to the content items).
OK so you're effectively talking about replacing the draft-site/published-site functionality with an arbitrary number of unpublished working copies that are created and destroyed at will. It's elegant, but it's a lot more complex than what we currently have. I think it's important that we keep the use-case which motivated this front-of-mind. Can you give a bit more context and detail about that use case?
--
OK so you're effectively talking about replacing the draft-site/published-site functionality with an arbitrary number of unpublished working copies that are created and destroyed at will. It's elegant, but it's a lot more complex than what we currently have. I think it's important that we keep the use-case which motivated this front-of-mind. Can you give a bit more context and detail about that use case?
> It actually grew out of wanting to provide a mechanism to exclusively lock content for a particular user, then lock a series of content items. To make it easier from a code standpoint, having an object representing the changeset up front was easier than figuring out exactly what you had edited from a particular time based on the state of the content in the system (and avoiding the _versions table :D). It also allows for different content types (non-SiteTree but with Versioned patched on) to be included in changesets. The actual objects related to the changeset aren't the content items themselves, but 'pointers' to the content items. Cancelling a changeset simply deletes the changeset object and these objects, which is different from Reverting (which undoes the changes to the content items).
Aah, of course, if you introduce the locking then any given draft page will only exist in 1 changeset. Gotcha.
> They had many different departments filling out various bits of the content that would be aggregated into a single page, with some of that content driven by automated processes.
...
> Due to complaints to the ACCC, this could have lead to huge fines, so one of their key requirements when redeveloping was being able to ensure publication of a specific list of content at once in an atomic manner.
This justifies the changeset system but not the locking that you've rolled into it. And, if the locking is unnecessary, the changeset can be created at publication time. The challenge, it seems, is that one person would need to be responsible for taking all of the changes from each department and rolling them all together into a single change-set.
This would be a good reason for providing tools to combine changesets together, but doesn't seem to have anything to do with locking, nor with the creation of changesets at edit time.
> At the same time, no-one should be able to edit content that another person has started editing until that person has finished with the content.
This statement has no justification. You appear to be taking this statement as self-evident, and I don't see why it is necessary to enforce this?
Certainly we don't want people overwriting each other's changes, so we we need something similar to the concurrentediting module where it prevents one change from overwriting another, but you seem to be suggesting that we extend that out so that the content is locked for the entire workflow step.
There are several disadvantages:
- People will forget to cancel changes and go on holiday, leaving the content locked and people unable to edit it.
- A common use-case is to log onto the system and review someone's changes, without using the workflow system. Remember that much of real life will happen outside the comforting but illusory flowcharts of a workflow system. This is no longer allowed.
- Collaboration on the draft content appears to be impossible.
I don't really see the advantage except for the "isn't it great? now the computer is your boss!" adage that is usually the starting point for Workflow Gone Mad(tm). If you look at where online editing tools are going they are allowing *more* concurrent editing, not less - eg, Google Docs.
This locking concept seems to be anti-collaborative, and that's not a direction I'd like to see SilverStripe go in.
> I've put up a demo of the functionality as it exists at the moment
> http://playground.mikenovember.com/changesets/admin
I expect that the UI you've come up with is just a mocked-up proof-of-concept, but it does illustrate the care we need to take when introducing these new features. The system in your demo is substantially more complex for authors than regular SilverStripe.
I would hate to see usability sacrificed on the altar of enterprise features. ;-)
So, it seems that we're mostly in agreement, and that the auto-locking is generally something that appears in the early stage requirements lists of well intentioned but misguided corporates. ;-)
That being the case, I would suggest that the auto-locking feature is tacked on, rather than altering the design of the changeset system to support it. In particular, I mean that the changeset get generated when you kick off a workflow with "request publication" rather than when you first start editing.
Manual locking seems like a useful tool to have in the system, particularly if the new UI gives us a place to list less important actions that we use sometimes - the list of buttons along the bottom is getting unwieldy. I'd suggest that in the default package, "lock this page" is available as an explicit action that writes somewhere that has nothing to with changesets - for example, adds a row with SiteTreeID & MemberID to a DataObject called SiteTreeLocks.
For clients that want to automatically lock, we can add a couple of hooks that lock on first edit, and unlock at some point in the workflow. This would be the "tacked on" option.
I'm generally reluctant to include features in the system that everyone working on the product knows are a bad idea, just to keep the sales guys happy. Sometimes we need grin and bear this, but it seems a step too far to then change the system's architecture to support those glitter features.
> From a collaboration perspective, I'd like something where individual paragraphs of content were updated in realtime on a user's screen that had been contributed by other users to the document and automatically merged behind the scenes. I know a guy who did something similar for docx documents against the Alfresco repository, and the effect was awesome. Basically, a single content field gets temporarily broken up into multiple "Fragment" fields in the background based on a selector, eg a <p> tag. These were constantly updated realtime as different editors add to the document, and when they 'save', the fragments get reassembled into the actual content field. Combine that with a frontend editor that allows for editing on multiple different frontend fields from different data objects and it would make for a pretty impressive client demo :).
C'mon, let's go the whole hog and mimic google-docs! ;-) Seriously, though, live editing combined with front-end editing could make for a fantastic system, particularly for wikis, intranets, and other more collaborative sites. I'd be really keen to see what's possible there, although I don't think it's the #1 priority there.
So, it seems that we're mostly in agreement, and that the auto-locking is generally something that appears in the early stage requirements lists of well intentioned but misguided corporates. ;-)
That being the case, I would suggest that the auto-locking feature is tacked on, rather than altering the design of the changeset system to support it. In particular, I mean that the changeset get generated when you kick off a workflow with "request publication" rather than when you first start editing.
C'mon, let's go the whole hog and mimic google-docs! ;-) Seriously, though, live editing combined with front-end editing could make for a fantastic system, particularly for wikis, intranets, and other more collaborative sites. I'd be really keen to see what's possible there, although I don't think it's the #1 priority there.
I would assume that the basic query would be something like:
SELECT SiteTree.* FROM SiteTree
LEFT JOIN SiteTree_Live ON SiteTree.ID = SiteTree_Live.ID
WHERE SiteTree.Version != SiteTree_Live.Version
OR SiteTree_Live.Version IS NULL
What that doesn't do is filter down to edits you were involved in, or edits you made exclusively. Of course, if changesets would only simplify the listing of changes that you made exclusively. If another user had made a change and then you had then contributed to the change, you would probably want it to be listed as an option, in which case the following query would give you what you need. It's not exactly simple but it's workable, and can be written as a DataObject::get() in the current system.
SELECT DISTINCT SiteTree.* FROM SiteTree
LEFT JOIN SiteTree_Live ON SiteTree.ID = SiteTree_Live.ID
INNER JOIN SiteTree_versions ON SiteTree_versions.Version > coalesce(SiteTree_Live.Version,0)
WHERE (SiteTree.Version != SiteTree_Live.Version OR SiteTree_Live.Version IS NULL)
AND SiteTree_versions.AuthorID = $currentMemberID
In practise, we would want to embed it as a built-in query for the Versioned dataobjects in the new ORM, so you call something like get('SiteTree')->DraftChanges() or get('SiteTree')->DraftChangesBy($currentMemberID).
You could switch between the two different sets of pages with an interface something like this ASCII art mock-up. This would let you request the publication of other people's changes if necessary; this wouldn't be the default option but would be handy for some.
Show:
(o) My changes on draft
( ) All changes on draft
[ ] Home
[ ] About Us
[x] Products
[x] Some Altered Page
[ ] Other Altered Page
Now, if a changeset was created at edit time, then you don't need to run those queries to do a simple publish action - publish everything that I have edited. However, in practise you're probably going to want to give some kind of interface to let users tweak the set of pages that are submitted for publication, which means you're going to need two things:
* You will need to run the above queries regardless, to generate the list of pages available to them
* You will need to manipulate the default that is generated.
> Either way, I think the concept of changesets would be a really nice piece optional functionality (core or otherwise), regardless of the implementation approach
Yeah, agreed. :-)
Show:
(o) My changes on draft
( ) All changes on draft
Nicolaas--
hey guys i think as all the other devs, we are wating for the packtpub
Open source Awards desition... while waiting, take a look to pimcore,
they have some really awesome features that would worth watching
http://www.pimcore.org/products-and-solutions/screencasts
i think in the examples it shows something like a front-end editing in
the backend. looks nice.
While I know that sapphire itself can't use them (I'm assuming you'd want to be at least 5.2 compatible), it would be nice if us developers could :)
---
Simon Welsh
Admin of http://simon.geek.nz/
Who said Microsoft never created a bug-free program? The blue screen never, ever crashes!
> I thing I would really like to see is support for namespaces (http://php.net/namespace)
>
> While I know that sapphire itself can't use them (I'm assuming you'd want to be at least 5.2 compatible), it would be nice if us developers could :)
What would need to change for that to happen?
I've had a very short poke around and found a couple of things:
- ManifestBuilder complains if two classes have the same name. This would need to be changed to same name in the same namespace
- ManifestBuilder can't pass classes that extend namespaced classes (class Controller extends /Controller)
- The autoloader gets passed a namespaced-qualified path (/mynamespace/MyClass), when called from inside a different namespace, which it can't find
That's all I've noticed so far.
Well, it seems like a good change. I think we'd accept a patch that still worked on PHP 5.1 & PHP 5.2, and didn't slow things down too much.
> --
> You received this message because you are subscribed to the Google Groups "SilverStripe Core Development" group.
> To post to this group, send email to silverst...@googlegroups.com.
> To unsubscribe from this group, send email to silverstripe-d...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/silverstripe-dev?hl=en.
>
---
SilverStripe core, as it is now, is working wonderfully & well tested.
2.4 solved a mission-critical issue in making performance
(requests/second) accessible through partial caching & other tweaks, and
it can now be used as a "no-brainer" for building your next web
presence. As such; I believe the focus should be on fixing current
weaknesses and lingering issues with 3.0 -- things like improving the
cms and abstracting existing functionality into an even greater set of
feature-full & extensible core modules. Some of these (e.g. complete
Javascript overhaul, form fields rewrite / validation, etc.) will take a
long time & need testing. These are *immediate* needs and necessary for
healthy evolution in the project's ecosystem. Shifting to PHP 5.3 while
this is all happening may be lack packing an entire pack of big-league
chew in your mouth & trying to chew.
I personally see the only necessity of a moving to PHP 5.3 would be to
support NameSpaces -- allowing SilverStripe to be *properly* embedded in
a much larger PHP 5.3 application. Perhaps work can be done in this area
for 3.0. An alternative boot/autoloader that automatically namespaces
all project classes could [perhaps] be introduced? A build utility could
be made but I think it would be more interesting to have an alternate
autoloader/manifest builter prefix all classes on-the-fly with a
configurable namespace (say "MySite"). This would be prep-work towards
PHP 5.3 -- although I have little experience here & not sure what is
possible.
Would love to hear what the core team is planning & how they plan to
benefit from PHP 5.3!
~ Brice
>>> On 7 Dez., 02:13, Sam Minn�e<s...@silverstripe.com> wrote:
>>>>> I've had a very short poke around and found a couple of things:
>>>>> - ManifestBuilder complains if two classes have the same name. This would need to be changed to same name in the same namespace
>>>>> - ManifestBuilder can't pass classes that extend namespaced classes (class Controller extends /Controller)
>>>>> - The autoloader gets passed a namespaced-qualified path (/mynamespace/MyClass), when called from inside a different namespace, which it can't find
>>>>> That's all I've noticed so far.
>>>> Well, it seems like a good change. I think we'd accept a patch that still worked on PHP 5.1& PHP 5.2, and didn't slow things down too much.
I completely agree -- as I believed was sufficiently stated in my first paragraph. My concern is that changing the underlying framework is going to further delay a release -- and that there are immediate needs that I believe the focus should be on. Things like rewriting the cms javascript (and the reworkings involved), improving requirements (css/js serving), etc. These changes are the springboard to new 3.0 SilverStripe development and the sooner they're in developer hands, the healthier the ecosystem.
I can't speak for the core team at all -- having never met or discussed SS with any of them -- so this will have to be their decision and I'm sure whatever path they choose will be an enlightened one. Eventually the change will come and refactoring will ensue -- so I guess the question has to do with timelines (when do we want a release?) and changes (how much do developers needs to learn / change?).
Interestingly enough Debian 6.0 is rounding the corner -- which is arguably the bellwether of what version to support. It comes packed with PHP 5.3. For SS: It may also be worth considering what requirements are of 3rd party frameworks. Personally I wouldn't switch before.
~ Brice
>> SilverStripe core, as it is now, is working wonderfully& well tested.
>> 2.4 solved a mission-critical issue in making performance
>> (requests/second) accessible through partial caching& other tweaks, and
>> it can now be used as a "no-brainer" for building your next web
>> presence. As such; I believe the focus should be on fixing current
>> weaknesses and lingering issues with 3.0 -- things like improving the
>> cms and abstracting existing functionality into an even greater set of
>> feature-full& extensible core modules. Some of these (e.g. complete
>> Javascript overhaul, form fields rewrite / validation, etc.) will take a
>> long time& need testing. These are *immediate* needs and necessary for
>> healthy evolution in the project's ecosystem. Shifting to PHP 5.3 while
>> this is all happening may be lack packing an entire pack of big-league
>> chew in your mouth& trying to chew.
>>
>> I personally see the only necessity of a moving to PHP 5.3 would be to
>> support NameSpaces -- allowing SilverStripe to be *properly* embedded in
>> a much larger PHP 5.3 application. Perhaps work can be done in this area
>> for 3.0. An alternative boot/autoloader that automatically namespaces
>> all project classes could [perhaps] be introduced? A build utility could
>> be made but I think it would be more interesting to have an alternate
>> autoloader/manifest builter prefix all classes on-the-fly with a
>> configurable namespace (say "MySite"). This would be prep-work towards
>> PHP 5.3 -- although I have little experience here& not sure what is
>> possible.
>>
>> Would love to hear what the core team is planning& how they plan to
I think this is an approach that really should be taken. There are a
number of features in 5.3 that can exist without breaking the 5.2
compatibility (namespaces aren't one of these) namely __callStatic,
get_called_class (with a function_exists()) call and lambda/anonymous
functions with is_callable.
I think it would be a great way of moving into the brave new world by
making some use of these that benefit people on 5.3 and don't break
compatibility on 5.2
What do you think? I also think discussions of how to actually create
the APIs should be moved into a separate thread.
Cheers,
Michael
The fact that Debian, RedHat, and Zend are all moving towards PHP 5.3 is encouraging although it's a bit early to make a definitive call. According to http://phpadvent.org/2010/usage-statistics-by-ilia-alshanetsky PHP 5.3 has 4% of the PHP market compared to 66% for PHP 5.2. As the article says, stable Linux distros bundling 5.3 in the near future will change things, but predicting the future is hard. Lucky, Ilia is attempting to get the stats generation set up as a monthly process, and he's going to be updating the world on his progress at http://ilia.ws/. I, for one, have subscribed. ;-)
I think that, while there are certainly plenty of things we could do to make use of PHP 5.3, we don't need to starting coding for them from day 1.
Regarding late static binding, frankly I think we should move more in the direction of reducing the prevalence of static method calls! They make code more difficult to test and make it harder decouple the various pieces of SilverStripe. To the extent that static methods are available, I would expect that they are included as a layer on top of primarily instance-based code.
Thanks,
Sam
I'm just afraid that implementing the ability to backend and frontend publish in one piece of software will become too complex to the developer (needing to create 2 different sets of content editing fields and code) and the client ("If you want to edit the content on this page, you can go either here or here.").
On Nov 17, 2010, at 7:50 PM, John Milmine wrote:
> From the submissions so far, it sounds like the community is open to a
> front-end CMS but don't want to sacrifice some of the other things. We
> realise that you guys at Silverstripe don't have 24/7 open source time
> and have plenty of other paid commitments to deal with.
>
> Happy to have a module and agree with Jason, that it would be a nice
> thing to potentially sell in. I definitely agree with spronk and
> others that it's better in theory than practice, at least in the
> systems I've tried.
>
> My points of concern would be:
> Template language decoupling.
> Database abstraction layer.
> Removal of prototype and only use 1 js library (jQuery)
> Like the idea of DataList above
>
> Also agree that SiteTree needs some improvements or added flexibility.
> Although I LOVE the strict sitetree, it does have disadvantages when
> it comes to things like tagging, blogging etc.
>
> --
> You received this message because you are subscribed to the Google Groups "SilverStripe Core Development" group.
> To post to this group, send email to silverst...@googlegroups.com.
> To unsubscribe from this group, send email to silverstripe-d...@googlegroups.com.