Where is this HTML coming from: Revision

Last updated by Matt Beckett

Where is this HTML being generated?


Elgg follows an MVC pattern where Views are 'V'.

Views are reusable code that get called like this:

  echo elgg_view('view/name', $params);

Where $params is an array of variables used by the view.

The views can be found in their own php files, in core they reside in the directory /views

On each pageload there is a viewtype set - typically as a $_GET value - [site_url]?view=rss

If nothing is defined for the viewtype the type will be 'default'

Therefore the same views can render differently depending on the viewtype.

The view with the name 'view/name' can be found at:



When markup problems appear, or you want to trace back the origin of a particular view there a few methods that work.

Developers plugin

A bundled core plugin that is very helpful for developers in a number of ways.

Under the menu 'Develop' => 'Settings' there is an option for 'wrap views', this wraps each view with HTML comments letting you know which view is generating that portion of the HTML. These comments look like:


Therefore in this case, the html is being generated in the file /views/default/page/elements/foot.php


Content Debugger plugin


This plugin adds a link to the topbar menu for administrators - if no topbar exists in the theme (as is the case with the current landing theme) a manual toggle is possible by visiting [site_url]/content_debugger/toggle

Once activated simply mouse-over the html you wish to identify and a very convenient tooltip will show various information including:

  - the view that generated the HTML
  - the hierarchy of views that called the originating view
  - the physical location of the view file
  - any view extensions and the order they are called in
  - how long it took to render the view

This is much more informative and quicker than the developer tools method, and the one I recommend.


Overwriting Views

Plugins and themes can redefine views simply by copying the file structure of the original. For example, if a core view is located at /views/default/input/text.php a plugin can redefine the view by creating (within the plugin structure) /views/default/input/text.php

If more than one plugin redefines a view, the plugin located lower down on the list (run last) takes priority.

In order to identify which specific file is defining a view you can either use the Content Debugger plugin as explained above, or use the developer tools plugin by going to 'Develop' => 'Tools' => 'Inspect' => 'Views'

Matt Beckett

I'm a self-employed web developer, family man, nerd, scuba diver. Manager/maintainer of this elgg community site, and core Elgg development team member.