Migrating from Joomla3 with K2 to Silver Stripe


Silverstripe Version:
4 (latest

Hi All,

I have a website with heavy daily visits (tens of thousands/day) built with Joomla3 + K2 component, yeah I know! That’s why I want a better CMS with cache control of each HTML generated page like SS.

It has 2-level categories: Letters (A-Z) and Schools under each letter. Under schools I have my teachers (article, page, post… you name it). The teachers have a title (teacher name), text (brief) and 3 custom fields (grade=>text, year=>4-numbers dropdown list and county license issuer=>text) all are searchable when clicked (if you click on 1995, you get a list of all teachers licensed on this year).

Now, here might be my major issue. I have over 18K teachers (K2 articles) and having them on the tree will be heavy and hard for my usrs (2-3 just adding schools as categories and teachers as articles/pages). My website has high Google rank because of my URL links. So, I will create a CSV file containing all articles’ info (splitting custom fields JSON from K2), categories and the URLs.

Finally, the page starts with latest 90 teachers showing Teacher-School. On the top a menu of letters to take you to a list of schools under the clicked letter. And when clicking on a school you get a list of teachers when clicked takes you to his/her details. The teacher details page shows name on top then the brief and below it the 3 custom fields like this:
Grade: {elementary}=>linked to search for elementary teachers
License Year: {2004}=>linked to search for teachers licensed in 2004
County: {countyName}=>linked to search for teachers licensed from this county

One last thing is the widget for searching with Text field =>title/brief, and the 3 custom fields.

The structure of the site must be the same as current site, like:
/ => for home
/a.html => for the list of schools in A
/a/school_naem.html => for list of teachers

I think SilverStripe might not allow .html for the category, but it is important to avoid redirects and loosing indexed search engine data.

That’s said, my questions are:

1- How to build the website efficiently without having 400 categories and 18k pages in the tree? Looking at the blog component, it is using slug tags, which will not work for me.
2- How to create the homepage latest 90 teachers?
3- How to create categories and subcategories, and making users do so in backend?
4- How to create the custom fields and link them to search by each?
5- How to ensure the link structure is done as explained above.

Thank you in advanced for any help. I will be glad to answer any question you have.


Not yet


One solution would be to use DataObjects to store the data, rather than using the Pages in the SiteTree.
You’d then build a couple of custom controllers to deal with displaying the content. There shouldn’t be an issue with the .html extension in this case. You’ll also get full control of your URL structures.

The developer docs are going to be the place to get started and understand the concepts:

DataObjects: https://docs.silverstripe.org/en/4/developer_guides/model/data_model_and_orm/
ModelAdmin (for managing the data in the CMS): https://docs.silverstripe.org/en/4/developer_guides/customising_the_admin_interface/modeladmin/
Controllers & Routing (for delivering your pages and setting up your URL structure): https://docs.silverstripe.org/en/4/developer_guides/controllers/


@DorsetDigital Thank you so much for your reply. I have another question if you may about caching. I know I can cache the entire site, which fits me perfectly, but if I make a change/add page, will SilverStripe update the cache automatically? Or, can I recache it manually?

Thanks again


Thanks @DorsetDigital. The static publisher fits as the changes are every 3-5 weeks. I just wish there is a plugin/module builder to create plugins for SilverStripe to expedite process like the one in OctobeCMS. I am looking into other CMS, but SS is my best choice for now as file-based CMS would not fit my 18K records, and growing.

Thanks again, I will start working on building the site then check the caching. Keep up the good work.


There are a few possible caching strategies you could undertake, and it will depend on your application. You could go down the route of using the static publisher, which will output static versions of all the pages. This is a good approach for parts of the site which are non-interactive, and high-traffic. For other parts, you could look at partial caching of some of the content. You could also look at a reverse-caching solution such as Varnish if the site is especially busy.

All that said, I’d personally concentrate on getting the thing built and working as efficiently as possible without caches in the first instance - don’t rely on them for your application to work properly.