We think that the title of this article should be “Where Is My Content Stored in Joomla?” instead of “Where Are My Articles stored” in Joomla, but since most Joomla administrators treat all the content on a particular page as a single article, we opted for the latter title, but the former title is technically much more accurate.
You are browsing your Joomla website that you are so proud for, you find a a typo in one of the pages, and so you immediately login to your powerful Joomla backend and you try to find the article having this content. You spend an hour searching for the article and then you give up, bite the bullet, and call some Joomla Experts. It takes these experts a few minutes to find where the location of this content and now this whole thing makes you wonder whether you need some very basic lessons in Joomla. Let us answer this question: you don’t…
You see, Joomla is very tricky when it comes to content storage – and what makes it even trickier is the myriad of ways that developers, designers, and content managers opt for to storing content.
Technically, content on a Joomla website can be stored in any of the following:
- The database: In this case, the content is either stored in the table jos_content or jos_modules (replace jos with the table prefix of your database). When the content is in the database but not in the table jos_content, then it’s most likely in a custom HTML module. Please note that we are only discussing basic Joomla websites – some Joomla websites have some advanced extensions such as VirtueMart and JomSocial that store their content in dedicated tables.
-
The templates: Bad/irresponsible designers/developers love to make life even harder for the owner of a Joomla website by storing a lot of content in the templates (especially in index.php files). There are even some that store all the content of the website in one file (yes, we’ve seen it! It was all in one file!), which is the index.php file. They do this by creating conditions based on the current menu id. Here’s a quick example:
$menuId= JSite::getMenu()->getActive()->id ; if ($menutId == 1){ echo('This is the content of page 1'); } elseif ($menuId == 2){ echo('This is the content of page 2'); }
The code above is usually placed in the index.php file and is responsible for displaying content based on the menu item id. This method is bad on so many levels. Here's why:
- Everytime you need to make a change you will be changing the most critical file in your template that is also one of the most critical files on your whole website.
-
If a menu item is deleted and re-added, then the index.php needs to be updated.
-
The index.php will become a complete mess once the website has more than 5 pages.
-
This method defies all good programming practices.
-
Filesystem: Some custom-made extensions grab some of their content (and sometimes the majority of their content) from the filesystem using the function file_get_content. This function will take the path of a file in the directory of a Joomla website, reads its content, and then returns it so that it can be displayed by the extension. This method is mostly used to support a mini-template system. Here's an example:
- A certain business has many departments. Each department has a page on the website. The page has a lot of information, and is identical for all departments, with the exception for the name and the description of the department.
-
An extension is created to gather the name and the description of all departments, and then generate the page for each department based on a generic content page (e.g. template).
-
That template is stored in a physical file.
-
3rd party external repositories: Content that is generated by widgets (such as Facebook or Disqus widgets) comes from a 3rd party repository. Usually the Joomla administrator has little control over that content.
Now that we have explained the common places where content of a Joomla website is stored, let us explain the process of finding the content on a Joomla website:
- Finding the location of a content on a Joomla website - the easy way
Let's assume that the page title is something like http://yourjoomlawebsite.com/our-policies. In order to find where is this content, you first need to find the menu item with an alias that is "our-policies". Once you do that, you will be able to know which article this menu item points to. You will also be able to know which modules are assigned to this menu item. By looking at the article's content and by examining each module, you will be able to locate the content that you're searching for.
-
Finding the location of a content on a Joomla website - the advanced way
While the above method works well in most of the cases, it suffers from the following drawbacks:
- In older versions of Joomla, modules assigned to a certain menu item aren't displayed on the menu item page, thus making locating the content a true quest.
-
Even if the modules assigned are listed, there are sometimes dozens of them assigned to a single menu item, which makes searching for the content's location challenging and tedious as one needs to examine each and every module until he finds the module containing the content.
-
It can be extremely hard to find the location of the content if there are soft or hard redirects hard coded into the system. Soft redirects are added to to the standard redirect extension (under "Components"->"Redirects"), hard redirects are added to the .htaccess file.
-
It doesn't take into account content that is located in the fileystem.
A better, and much faster way for locating content on a Joomla website is to do a search of a unique string on the page at the database level using the phpMyAdmin interface. For example, let's say that your page has the following sentence: "We offer the best plumbing service!". Doing a search at the database level for %We offer the best plumbing service%. will return all the rows containing this sentence (typically it should be only one row, if not, then you need to make your search even more specific) - these rows can belong to any table: jos_content table, jos_modules etc...
Now, if you are not able to find your sentence using a global database search, then you should do a search on your filesystem using grep at the root directory of your website (this is pretty advanced stuff and you may need to request the help of a system administrator). If you are still unsuccessful in finding the content, then most likely this means that the content is generated by a JavaScript tag and it comes from a different server.
If you still need help locating content on your Joomla website then feel free to contact us. We are super fast, our rates are competitive, we are very friendly, and we know our Joomla!
This article was helpful. I am trying out joomla. I have already built my website via Html & CSS, but I wanted to see if joomla would make my life easier. So I installed joomla, JCE & Akeeba and I am working through the video tutorials on my domain host server (SiteGround). The problem is I did not know to install joomla in a subdirectory, so my testing/learning would not interfere with my present website. So I could not make my joomla homepage my top level page, it is subordinate, at this time to nothing. So I want to run it to see what it looks like and I can’t find it! Now I know why, it isn’t an html file at all, it is in a database system that I have no idea how to access without contaminating my working web site.
Not your problem I know, but frustrating.
Hi RJ,
Let us know if you need help!