Calling all developers! We invite you to provide your input on Feature Experimentation by completing this brief survey.
Calling all developers! We invite you to provide your input on Feature Experimentation by completing this brief survey.
Please try this:
var contentEvents = ServiceLocator.Current.GetInstance<IContentEvents>();
contentEvents.PublishedContent += contentEvents_PublishedContent;
Hope that help!
Ha Bui
Hi, habu,
I don't think this helps me, I don't have a problem with C# code, I am not sure how to execute the code after a page is published. I wanted to avoid using javascript polling.
I imagined there should be some way to subscribe to some dojo event that is raised after a page is published.
Hi Marija!
We don't have a really nice way to do this at the moment. Since our widgets bind to the data on the client and this is updated we really don't have this need ourselves. I found that we do publish an event when publishing to handle potentially changes in sort order and it should be possible to listen to this event using the pub/sub system. I consider this somewhat a hack/temporary solution that can be used until we have a more proper way to do this:
//(topic = "dojo/topic")
topic.subscribe("/epi/cms/contentdata/childrenchanged", function (contentReference) {
});
Hey, Linus, thx a bunch for the answer, it seems like I am on the right track.
There is just one tiny glitch - this even is called when page is saved, not when it's published. My stuff get executed after a page is published, so I guess I need another event. I can't find it, however. Is there one?
Hi Marija,
As Linus said, that's a temporary way! Because Publish command will publish this event when content is published. So you can listen and get content right back by version agnostic id and check its status!
I found another way (at the server side):
1. After content published the context will be changed!
2. After context changed IFrameContextComponent.js will be reload (because you set ReloadOnContextChange = true)
3. It will query back to server with url like: http://yoursite/<url to your modules>/<your control>?uri=epi.cms.contentdata:///6&id=6
I don't think we can not handle by this way!
Hope that help!
// Ha Bui
Hi, habu,
Thx for the answer, however, this still doesn't work.
I already have ReloadOnContextChange = true, however, IFrameContextComponent.js does not refresh my plugin.
Ah, I know why, when IFrameComponent.js call to IFrame.js > load method, the method will be resolved immediately because the url is not dfference with current and we don't force reload! :(
The final way you can try is customize wiget type inherited from IFrameComponent.js and override method below:
_constructQuery: function (context)
You can override like this:
_constructQuery: function (context) {
return {
uri: context.uri,
id: context.id || "",
clientTicks: new Date().getMilliseconds()
};
}
Just a trivival way! I'll try find out a better way!
// Ha Bui
I do not having a direct solution (other than listening to the event mentioned previosly) but have noted this for future improvements.
I have an iframecomponent whose values depend on the values of URLSegment/PageName, so when a page is published, I have to refresh the values inside the component.
This is the definition of the component:
Earlier (until 7.5 version, this code worked):
Now, EditPanel doesn't seem to exist and I am not sure how to do this differently.