AEM - Store the HTML version of the page in HTML - aem

I have a very specific use case for AEM so maybe you have a solution or an alternative.
I'd need to be able to store the html version of the page in JCR (as it is stored in the dispatcher) so that I would be able to retrieve it in a separate API call from a different system.
Have you had this problem before, or do you have any idea how that could be achieved?
Many thanks

I would strongly suggest not to have the .html page stored inside the AEM instance as that is not core objectives of the AEM as content management system. You should use your dispatcher instance (cached files) and try to keep it on an FTP server and share the file URL with different instances as a data.
Again, please note that AEM instances are very sensitive and should mainly focus on the pages/components. In this case, you are storing the page which is generated out of the components and every time when they generated or modified you need to update this again. it will be a burden. Hence, I am suggesting to take it from the dispatcher instance which will happen as part of the publishing process.
Let me know if you have any other thoughts.

Related

Change CKAN API Interface - are there limitations on the API?

I've looked around the site to see if there are any people who have changed the CKAN API interface so that instead of uploading documents and databases, they can directly type onto the site, but I haven't found any use cases.
Currently, we have a page where people upload data sets through excel forms that they've filled out, but we want to make it a bit more user friendly by changing the API so that they can fill out a form on the page rather than downloading the template, filling it out and then uploading it.
Does CKAN have the ability to support this? If so, are there any examples or use cases of websites that have use forms rather than uploads?
This is certainly possible.
I'm not aware of any existing extensions that provide that functionality, but you can check the official list of CKAN extensions if there's anything that fulfills your needs.
If there is no existing extension that suits you then you could write your own, see the extension guide for details on how to do that.
Adding an API function to CKAN's API is possible, but probably not what you want in this case: the web UI usually does not interact with CKAN via the API but via Flask/Pylons controllers. Hence, you would add your add controller which first serves your form and then processes the submitted inputs.
You can take a look at the ckanext-pages extension, which does exactly that (for editing static pages instead of datasets, but your code would be similar).

storing custom data in AEM 6.1 JCR repository

We just got AEM 6.1, and went through developer training, as well. I am coming from another CMS background (Sharepoint) and wanted to learn / know, if i need to create a list to store data into it, and refer that programatically, somewhere on the page or other common libraries in my project , how do i do that and where do i store the data , is that in the /etc folder. Not clear, I guess, what i learnt from the training is that data is stored in node types as Key / Value pair, so for example if i had a list of movies that with attributes such as date released, actors, awards etc. how do i store that information in AEM, i don't want to store this as a part of the list component of the page. let me know if my question is vague, as i said, i am transitioning form another CMS. Thanks in advance.
I would also appreciate any pointers to blogs, etc..
#Rahul
Where to store data? Data can be stored in both the /etc folder and /content folder. Folders in /etc are usually used to supplement the application's business logic code development, for eg. clientlibs folder is used to store client side code(website styling, scripts etc. The content folder is where the authored content, user generated content gets persisted as key value pairs and you will have to build a logic using jcr api's to retrieve this data from content nodes. You usually use core java to build this logic, if you want data from multiple nodes you can loop through the nodes and populate a data structure with the content, if you require data from a single node you can retrieve it to a variable, it is all upto the programmer and the business scenario involved.
Here is an article which describes how to access content from CQ. https://helpx.adobe.com/experience-manager/using/programmatically-accessing-cq-content-using.html

Content Management in Bluemix

Is it possible to link a bluemix website with some kind of content mangement?
I'm trying to build a formular for an event registration website with bluemix.
It must be possible for the promoter of the events to decide which data the participants have to fill out. As an example for a business dinner there is no need to ask if he needs a flight or not and for another event it would be necessary to know it. So the content must be "adaptable" by the promoter because I don't want to write a new website for each event.
Does somebody know a solution for this problem?
Thank you very much for your help!
Deploy your site on IBM Containers and utilize the ssh capability to scp your content into the web app/site.
There are several possibilities:
create an application with a Cloudant backend. The data stored inside is free form. You then "just" need to define the valid form. I used angular.js and angular-formly (with the form definition stored in Cloudant, so you can edit it)
Use PencilBlue a Node.js CMS using a Mongo backend. Eventually it does all you need
Use a container with a common engine (e.g. Wordpress)
So you can act depending on how custom you want the solution to be. Let us know what works for you

Zend - Configuration Data from Database

I am new to Zend and still learning.
I need to read some configuration data from the database and keep it in session. I want this data in all the pages, so I need to intercept all the request and check if the session contains the required data, if not I will fetch it from the database and put it in the session.
I would like to know the best place to put the code in. In Java we used to check that in a filter. I am guessing here I have to put this is in an Action Helper. Just wanted to check what options I have and what are the best practices.
Thanks for any suggestions.
for that purposes you may use Zend_Registry singleton class for providing accessibility of session data from every point of ZF-project. For storing session data there are also several classes, e.g. Zend_Session class
I would definitely put this in a Controller Plugin class. eg.
Application_Controllerplugins_SessConfig extends Zend_Controller_Plugin_Abstract
This way you can catch the request early on, and do whatever you want with the data...
This is another answer of mine on SSL routing, but the logic is the same for the plugin class: How to implement SSL in Zend MVC
i am about to implement a similar solution whereby an application instance (which is to be rolled out to various customers) needs certain settings-data to be editable by admin via cms and thus am storing it in the db. i am then going to retrieve and add these settings [as a sub-object] to the config class (which in turn is added to the registry in the bootstrap. this seems like the cleanest solution to me as then all config data are stored in the one place, regardless of their source being an ini file or the db.
i'd be interested to hear other opinions on how this is done.
rob ganly

Adding pages "on the fly" with a CMS system

I am in the process of building a website content management system for one of my clients. It's a highly customized system, so I cannot use any "of the shelve" solution.
I need to allow my client to add pages to the website on the fly. I have two options here:
(1) Create a database driven page in the format of www.mycompany.com/page.aspx?catID=5&pageID=3 (query the database with the category and page ID's, grab the data and show it on the page) - or -
(2) Allow the management system to create static pages, something like www.mycompany.com/company/aboutus.aspx and www.mycompany.com/company/company_history.aspx , etc.
I believe that, while the former is much easier to implement, the latter is a better both for the user AND for Google.
My questions are (finally): (1) Would you agree that the latter is a better solution, and (2) What is the best way to implement such a solution? Should I create and update each file using the FileSystem (i.e. - the site's management system requires the user to supply a page/file name, page title and content, and creates the page on the fly based on these parameters)? Is there a better way?
Thank you!
It's entirely possible to have database driven pages with nice URLs. StackOverflow itself is a great example - this question's URL is http://stackoverflow.com/questions/1119274/adding-pages-on-the-fly-with-a-cms-system, but the page is built from the database, not static HTML.
I would use the first solution, but mask the addresses using a custom request handler. Basically, give each of your pages a unique string ID (such as about-us) and then, with your request handler that takes all requests, find this particular page in the database and render it.
See this article for some additional info (found it when googling for custom http handlers in ASP.NET.) In that article, it has the following handler added:
<add verb="*" path="*.piechart" type="PieChartHandler"/>
You would probably want to catch all paths (*), excluding certain media paths used for CSS, images and JavaScript.
More resources:
Custom HTTP Handler
HttpHandler in ASP.Net
I'd stay clear of static pages if I where you. Dynamic Data, MVC and some good planning should take you a long way!
What you need to do is to create some or many templates that each view/controller in mvc can use. Let whoever is responsible for the content handle it through dynamic data entities.
I would use the first idea, but work out a better URL scheme. If the system doesn't provide nice URLs (without ?), you'll have trouble getting the search engines to parse the whole site. Also using numbers instead of words make it hard on users to pass around URLs.
If you start to have performance problems you could add caching that would generate static pages from time to time. I would avoid doing that until you have to; caching can cause many headaches along the way to getting it right.
Although the existing advice is more-or-less sound, the commentators have failed to consider one factor which, admittedly, you haven't given much detail on. Are these pages that they'll edit once they're built, or a they one-shot creations? If the latter, your plan of generating static pages isn't quite so bad as they suggest. Why bother even having to think about database schemas and caching, when you can just serve flat content.
It will probably make for pretty lifeless, end-of-the-road pages, but if that's what you want ...