<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pollen8</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pollen8"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Pollen8"/>
	<updated>2026-05-23T03:36:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Creating_PDF_views&amp;diff=170716</id>
		<title>J2.5 talk:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Creating_PDF_views&amp;diff=170716"/>
		<updated>2015-04-08T08:21:06Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Messy code in Chinese environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Has anyone tested this method on Joomla! 2.5?&lt;br /&gt;
EDIT: tested on Joomla! 2.5 and working fine.&lt;br /&gt;
&lt;br /&gt;
== Messy code in Chinese environment ==&lt;br /&gt;
&lt;br /&gt;
I have tested this articel in my j25 site. Everything work fine.But when I want output some Chinese char to pdf file.&lt;br /&gt;
the page goes wrong. The Chinese char to be messy code.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t konw how to solve this.&lt;br /&gt;
&lt;br /&gt;
You might need to install a Unicode font in DOMPDF (do a search on &amp;quot;dompdf unicode&amp;quot; for examples of how to do that&lt;br /&gt;
&lt;br /&gt;
Also try this for the render function:&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		// mb_encoding foo when content-type had been set to text/html; uft-8;&lt;br /&gt;
 		$this-&amp;gt;_metaTags[&#039;http-equiv&#039;] = array();&lt;br /&gt;
		$this-&amp;gt;_metaTags[&#039;http-equiv&#039;][&#039;content-type&#039;] = &#039;text/html&#039;;&lt;br /&gt;
&lt;br /&gt;
		// Testing using futural font.&lt;br /&gt;
 		// $this-&amp;gt;addStyleDeclaration(&#039;body: { font-family: futural !important; }&#039;);&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Package&amp;diff=161560</id>
		<title>Package</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Package&amp;diff=161560"/>
		<updated>2015-03-05T10:28:35Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Note on component dependant modules== &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
Sometimes modules (or plugins etc.) use a component&#039;s models and helpers and such. In these occasions it would be nice to be able to package your module in this way that it gets uninstalled when the component itself gets uninstalled.  This is called dependency management which has been desired in joomla but hasn&#039;t been done yet.&lt;br /&gt;
It is suggested to follow the standards and just using a package as is described below.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== What is a package? == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
A package is a extension that is used to install multiple extensions in one go. This is used if you have for example a component and a module that are depending on each other. Combining them in a package will let the user install and uninstall both extensions in one go. Package extensions can be used with Joomla {{JVer|2.5}} and higher.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== How do I create a package? == &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
A package extension is created by zipping all zip files of the extensions together with a xml manifest file. For example if you have a package composed by:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;component&#039;&#039;&#039; helloworld&lt;br /&gt;
* &#039;&#039;&#039;module&#039;&#039;&#039; helloworld&lt;br /&gt;
* &#039;&#039;&#039;library&#039;&#039;&#039; helloworld &lt;br /&gt;
* &#039;&#039;&#039;system plugin&#039;&#039;&#039; helloworld &lt;br /&gt;
* &#039;&#039;&#039;template&#039;&#039;&#039; helloworld&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
The package should have the following tree in your zipfile:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  -- pkg_helloworld.xml&lt;br /&gt;
  -- packages &amp;lt;dir&amp;gt;&lt;br /&gt;
      |-- com_helloworld.zip&lt;br /&gt;
      |-- mod_helloworld.zip&lt;br /&gt;
      |-- lib_helloworld.zip&lt;br /&gt;
      |-- plg_sys_helloworld.zip&lt;br /&gt;
      |-- tpl_helloworld.zip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The pkg_helloworld.xml could have the following contents:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;extension type=&amp;quot;package&amp;quot; version=&amp;quot;1.6&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;name&amp;gt;Hello World Package&amp;lt;/name&amp;gt;&lt;br /&gt;
 &amp;lt;author&amp;gt;Hello World Package Team&amp;lt;/author&amp;gt;&lt;br /&gt;
 &amp;lt;creationDate&amp;gt;May 2012&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
 &amp;lt;packagename&amp;gt;helloworld&amp;lt;/packagename&amp;gt;&lt;br /&gt;
 &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;url&amp;gt;http://www.yoururl.com/&amp;lt;/url&amp;gt;&lt;br /&gt;
 &amp;lt;packager&amp;gt;Hello World Package Team&amp;lt;/packager&amp;gt;&lt;br /&gt;
 &amp;lt;packagerurl&amp;gt;http://www.yoururl.com/&amp;lt;/packagerurl&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Example package to combine multiple extensions&amp;lt;/description&amp;gt;&lt;br /&gt;
 &amp;lt;update&amp;gt;http://www.updateurl.com/update&amp;lt;/update&amp;gt;&lt;br /&gt;
 &amp;lt;files folder=&amp;quot;packages&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;component&amp;quot; id=&amp;quot;com_helloworld&amp;quot; &amp;gt;com_helloworld.zip&amp;lt;/file&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;module&amp;quot; id=&amp;quot;helloworld&amp;quot; client=&amp;quot;site&amp;quot;&amp;gt;mod_helloworld.zip&amp;lt;/file&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;library&amp;quot; id=&amp;quot;helloworld&amp;quot;&amp;gt;lib_helloworld.zip&amp;lt;/file&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;plugin&amp;quot; id=&amp;quot;helloworld&amp;quot; group=&amp;quot;system&amp;quot;&amp;gt;plg_sys_helloworld.zip&amp;lt;/file&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;template&amp;quot; id=&amp;quot;helloworld&amp;quot; client=&amp;quot;site&amp;quot;&amp;gt;tpl_helloworld.zip&amp;lt;/file&amp;gt;&lt;br /&gt;
 &amp;lt;/files&amp;gt;&lt;br /&gt;
 &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
When you zip this and try to install it, you will see that every extension will be installed. Also the package will be visible in the extension list to uninstall all the extension of this package.&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Remember to use the package uninstaller instead of individual subpackage uninstallers to avoid orphan extension entries in the extension manager.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Id= &amp;lt;file id=&amp;quot;not_arbitrary&amp;quot;&amp;gt; === &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The id element in &amp;lt;file ..&amp;gt; tag are NOT arbitrary!. The &amp;quot;id=&amp;quot; should be set to the value of the &amp;quot;element&amp;quot; column in the &amp;quot;#__extensions&amp;quot; table. If they are not set correctly, upon uninstalling of the package the children ( &amp;lt;file&amp;gt; ) will NOT be found and uninstalled.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Manifest filename and packagename === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
The naming of the manifest file and the ability to uninstall the package file itself are closely related. &lt;br /&gt;
The manifest file must have a &amp;quot;pkg_&amp;quot; prefix, the remainder of the manifest name ( without .xml extension ) is to be used as &amp;lt;packagename&amp;gt;. Or, the other way around, a package you want to identify as &amp;quot;blurpblurp_J3&amp;quot; get that as its &amp;lt;packagename&amp;gt; and should be in a manifest file named &amp;quot;pkg_blurpblurp_J3.xml&amp;quot;. Failure to do so will make it impossible to uninstall the package itself.&lt;br /&gt;
&lt;br /&gt;
As of Joomla 3.4, you should include method=&amp;quot;upgrade&amp;quot; in the &amp;lt;extension&amp;gt; tag if you wish for your package to succeed in updating itself on subsequent installations.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=GSOC_2015_Project_Ideas&amp;diff=159356</id>
		<title>GSOC 2015 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=GSOC_2015_Project_Ideas&amp;diff=159356"/>
		<updated>2015-02-19T16:20:15Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC_2015.jpg|300px|left]]&lt;br /&gt;
&lt;br /&gt;
== Welcome to GSoC 2015 Ideas Page ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2014 project ideas page. As we move forward with the 2015 version of the Joomla! GSoC, we will post ideas that have been submitted to the GSoC Team below.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. Thanks!&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating as a student please review the materials on applying that are available at [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.&lt;br /&gt;
&lt;br /&gt;
Find examples of other years at https://docs.joomla.org/GSOC_2014_Project_Ideas&lt;br /&gt;
&lt;br /&gt;
== Important Guidelines on Submitting Ideas ==&lt;br /&gt;
&lt;br /&gt;
You do not have to be a GSoC student or mentor to suggest possible project ideas.&lt;br /&gt;
If you have ideas for the Joomla Google Summer of Code Program please send them to us at this form: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://docs.google.com/forms/d/1gheaUgNjGl7F9uuKl9HoWclhhjZ0aQZe1Oi7TXGYEeI/viewform?usp=send_form Click for Ideas Submit Form]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are some important guidelines to submit ideas, please read these carefully before adding your ideas:&lt;br /&gt;
* Ensure your idea is able to be completed in a fixed period of time. GSoC runs officially &#039;&#039;&#039;between May 25th 2015 and August 17th 2015.&#039;&#039;&#039; This is a very short period of actual coding time. Ideas should respect the time that students have available for the program. &lt;br /&gt;
* Keep ideas realistic. The ideas on this list should maintain a realistic amount of work for a single student, junior level-developer, who is working with a compressed timeline and a fixed completion (&#039;pencils down&#039;) date. &lt;br /&gt;
* Keep ideas core. The purpose of GSoC is to improve Joomla itself. This is not the time to add ideas for new extensions or features that may not be included by the PLT. If the idea is related to the framework, please consult the framework team directly about new ideas to ensure there is interest in having the package included as an official Joomla Framework package. &lt;br /&gt;
* Joomla 4. Currently there is not a baseline for what Joomla 4 is and what it could be. Ideas centered around Joomla 4 would not fit in well with the goal of GSoC 2015.&lt;br /&gt;
* When in doubt, reach out. If you&#039;re unsure if your idea belongs on this list, please post to the GSoC 2015 mailing list and ask about the community&#039;s interest. &lt;br /&gt;
* No documentation-focused projects. Google Summer of &#039;&#039;Code&#039;&#039; is a program about code. We expect our students to document their work, but writing documentation for Joomla as a project does not align with the goals of GSoC.&lt;br /&gt;
&lt;br /&gt;
== Idea Pool ==&lt;br /&gt;
&lt;br /&gt;
=== Joomla CMS Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Refactor Joomla CMS to use Dependency Injection ====&lt;br /&gt;
&#039;&#039;&#039;Brief Description:&#039;&#039;&#039; Joomla&#039;s CMS currently runs on a factory based design for allowing developers to access the application and shared library resources. This causes major issues when trying to utilize more modern approaches like auto-loading php libraries and adding in other vendor&#039;s libraries. &lt;br /&gt;
&lt;br /&gt;
This project will have the following requirements:&lt;br /&gt;
- Develop a standard for using dependency injection within the CMS&lt;br /&gt;
- Develop a proxy, backwards compatible way to use Joomla&#039;s JFactory function&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
At the end of this project we expect to have the ability to autoload Joomla&#039;s libraries (if compatible), as well as have a backwards-compatible way to continue using the old factory methods until they are depreciated and removed. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
php, object oriented programming, joomla cms and joomla framework, php autoloading, composer, vendor packaging&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium - Hard&lt;br /&gt;
&lt;br /&gt;
====Accessibility Template====&lt;br /&gt;
&#039;&#039;&#039;Brief Description:&#039;&#039;&#039;&lt;br /&gt;
Create a new, improved fully accessible administrator template using Joomla&#039;s built in User Interface Libraries. This task should holistically address accessibility in Joomla&#039;s backend admin area. This project will create a new template, and update or improve associated libraries and scripts as needed to help improve the accessibility of Joomla. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
Once completed the project should have a new admin template for Joomla as well as updated libraries which have built-in accessibility features. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
CSS, Accessibility Standards, javascript&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
==== JavaScript Unit Tests and Automation ====&lt;br /&gt;
&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039;&lt;br /&gt;
In Joomla JavaScript is increasingly becoming complex and difficult to maintain without having proper unit tests. Adding unit tests to JavaScript will help us for future enhancements of JavaScript as well as to do library migrations (e.g. MooTools to JQuery) with less impact to existing functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected End Result:&#039;&#039;&#039;&lt;br /&gt;
Write unit tests for existing JavaScript libraries (Custom written for Joomla). Automate unit test results to be added to Travis Build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
JavaScript, Joomla CMS (from a user point of view), JavaScript Unit Testing Tools and Technologies. JQuery, MooTools&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium - Hard&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Potential Mentors:&#039;&#039;&#039;&lt;br /&gt;
Roberto Segura, Ashan Fernando, Achal Aggarwal&lt;br /&gt;
&lt;br /&gt;
==== System Tests for Joomla Extensions (Covering the Official supported extensions) ====&lt;br /&gt;
&#039;&#039;&#039;Brief Description:&#039;&#039;&#039;&lt;br /&gt;
&amp;quot;The current roadmap of Joomla is focused on getting a light core, see: http://developer.joomla.org/cms/roadmap.html. Given that several Core components will be moved to independent extensions, the Joomla project needs to define a way to tests extensions. The present project consist in creating the system tests for the officially maintained extensions including: Weblinks, Contacts, Finder, Messages, Newsfeeds, Redirect, Search and PatchTester (see https://docs.joomla.org/Component_Patchtester_for_Testers). For example, the student is asked to: create the tests that install the Weblinks component in Joomla, create links in Administrator, interact with these links in Frontend. All the mentioned extensions features should be covered by the tests.&lt;br /&gt;
&lt;br /&gt;
The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing extensions with the Codeception PHP testing framework (more info at http://codeception.com). The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.&lt;br /&gt;
&lt;br /&gt;
To read more about using Codeception with Joomla! Read here:&lt;br /&gt;
https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
At the end of the project the student should create a Pull request against the different repositories of each extension providing the system tests that covers all the features of: Weblinks, Contacts, Finder, Messages, Newsfeeds, Redirect, Search and PatchTester. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Knowledge Perquisites:&#039;&#039;&#039;&lt;br /&gt;
&amp;quot;PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic git usage.&lt;br /&gt;
&lt;br /&gt;
Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Knowledge on linux console and Docker Containers.&lt;br /&gt;
&lt;br /&gt;
Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://docs.joomla.org/Running_Automated_Tests_for_the_Joomla_CMS&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium to Hard&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors:&#039;&#039;&#039;&lt;br /&gt;
Javier Gomez, Puneet Kala&lt;br /&gt;
&lt;br /&gt;
==== System Tests for Joomla! CMS (covering Users and Content features) ====&lt;br /&gt;
&#039;&#039;&#039;Brief Description:&#039;&#039;&#039;&lt;br /&gt;
The idea behind the project is to create the system tests for joomla User Management and Content features with the Codeception Testing Framework. Including the User cases of: creating, editing, removing, publishing articles of content and being modified by different user roles. Also the student is asked to create the integration tests that links the Administrator, the Frontend (by creating menu items) and the Modules and Plugins applications that are related to the Users and Content Features. For example: create an article in frontend, listing all the featured articles, show the articles of an specific category or create a menu item that links to an article.&lt;br /&gt;
&lt;br /&gt;
The student will have to study the old system tests structure built in the Nearsoft PHP Library and propose a new structure for testing the Joomla Core with the Codeception PHP testing framework (more info at http://codeception.com). The resulting tests need to accomplish the goal of being easily maintainable while being well architectured dividing the responsibilities in scenarios, Pages and Step objects. The mentors will provide the student with code samples that will help the student to achieve the mentioned goals.&lt;br /&gt;
&lt;br /&gt;
To read more about using Codeception with Joomla! Read here:&lt;br /&gt;
https://docs.joomla.org/Testing_Joomla_Extensions_with_Codeception&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At the end of the project the student should create a Pull request against the Joomla-cms repository (https://github.com/joomla/joomla-cms) providing the system tests for the Users and Content features. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Knowledge Perquisites:&#039;&#039;&#039;&lt;br /&gt;
PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML and basic git usage.&lt;br /&gt;
&lt;br /&gt;
Value will be given to these candidates that have basic understanding of Selenium, xPath, Codeception framework, Knowledge on linux console and Docker Containers.&lt;br /&gt;
&lt;br /&gt;
Is a must for being a candidate for this project to proof that you have been able to run in your local machine the current Webdriver Test Suite. See instructions at https://docs.joomla.org/Running_Automated_Tests_for_the_Joomla_CMS&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium to Hard&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors:&#039;&#039;&#039;&lt;br /&gt;
Javier Gomez, Puneet Kala&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Refractor Form Manifest Loading ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Brief Description: &#039;&#039;&#039;&lt;br /&gt;
Joomla&#039;s form library currently builds its forms from XML manifest files. We would like to extend the form class so that it can use other file formats such as JSON, YAML etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
At the end of this project we expect to have extended Joomla&#039;s form class so that it can read in various file formats and construct HTML form&#039;s from their content. Unit tests should also be provided to cover all formats that the class accepts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
php, object oriented programming, joomla cms, JSON&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
=== Issue Tracker Ideas ===&lt;br /&gt;
&lt;br /&gt;
In addition to the Joomla CMS, the Joomla Project also maintains a piece of software called &amp;quot;JIssue tracker&amp;quot;. This is Joomla&#039;s issue tracker which handles how bugs in the CMS are identified and fixed. The Issue Tracker relies heavily on Joomla&#039;s own framework packages. &lt;br /&gt;
&lt;br /&gt;
[http://issues.joomla.org Visit the Joomla Issue Tracker]&lt;br /&gt;
&lt;br /&gt;
There are two major enhancement projects for the issue tracker.  NOTE: Because each of these projects are &#039;smaller&#039; in scale, students should plan to implement both features as a single project during the GSoC period. &lt;br /&gt;
&lt;br /&gt;
==== Part 1: Implement Activity Charts ====&lt;br /&gt;
&#039;&#039;&#039;&#039;Brief Description:&#039;&#039;&#039;&#039; &lt;br /&gt;
Create an activity log chart for users based on their contributions on the issue tracker. This would look at user contributed issues, comments, commits, and other issue activity to create a chart of their activity. More details at: https://github.com/joomla/jissues/pull/491&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Result:&#039;&#039;&#039;&lt;br /&gt;
Several feature areas where users can view their activity, other users&#039; activity, and a leaderboard of activities across all users.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Difficulty:&#039;&#039;&#039;&lt;br /&gt;
Easy - Medium&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
PHP, Object oriented programming, javascript, basic math and algorithms. SQL and database queries. Joomla Framework&lt;br /&gt;
&lt;br /&gt;
==== Part 2: Releases View====&lt;br /&gt;
Create a releases view on the issue tracker which has some automated tools for helping with a Joomla release. There are several features this will implement. More Details at: https://github.com/joomla/jissues/issues/506&lt;br /&gt;
&lt;br /&gt;
- List issues closed during the release cycle. This is essentially a filter of issues.  This can integrate with GitHub&#039;s milestones but will require more hands on activity from JBS or other project teams that might use the application; only items that were fixed for a release cycle should ultimately be listed with a milestone and other issues be moved to another milestone or unassigned.&lt;br /&gt;
&lt;br /&gt;
- List contributors during a release cycle. his would show a list of all users with activity between two releases, be it code committed or tracker activity. We&#039;ll need to write some sort of API for this, but at the basic level it could be two queries: a query of the issues table and joined to the activities and milestones tables, filtered on a milestone ID and unique usernames for all issues processed in a period and a query strictly on the activities table filtered on a start/end timeframe and unique usernames. &lt;br /&gt;
&lt;br /&gt;
- Release metadata - Devise a method of tracking the number of issues open at the start and end of each release period, number of issues submitted during the period, number of issues closed during the period (and under what status; fixed, known issue, etc.), additional numbers as we think of it. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expected Result:&#039;&#039;&#039;&lt;br /&gt;
A view and associated functionality as a sort of &#039;dashboard&#039; for handling releases on issues.joomla.org. This will be where releases can be generated, and necessary data compiled to help with the release. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Necessary Skills:&#039;&#039;&#039;&lt;br /&gt;
PHP, Joomla Framework, SQL, Github, Github API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Potential Mentors:&#039;&#039;&#039;&lt;br /&gt;
Michael Babker, Nicola Galgano&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code 2015]]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=103188</id>
		<title>Using JLog</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=103188"/>
		<updated>2013-09-04T10:38:43Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.1|platform=11.1}}{{RightTOC}}&lt;br /&gt;
Using JLog can be very useful in components when analysing the performance of custom extensions - or analysing where extensions are giving issues. Note this should be used in tandem with php exceptions - not as a replacement. See [[Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]] for more information on this&lt;br /&gt;
&lt;br /&gt;
== Calling the class ==&lt;br /&gt;
&lt;br /&gt;
To use JLog you need to call the JLog class. Done through the following code:&lt;br /&gt;
&lt;br /&gt;
    jimport(&#039;joomla.log.log&#039;);&lt;br /&gt;
&lt;br /&gt;
== Basic File Logging ==&lt;br /&gt;
&lt;br /&gt;
Often you may wish to display an error log message and log to an error file. Joomla allows this natively through the [[JLog::add]] function. For example:&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;jerror&#039;);&lt;br /&gt;
&lt;br /&gt;
Adding the category of jerror means that this message will also be displayed to users. To only write to file you can easily drop that parameter and simply use &lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING);&lt;br /&gt;
&lt;br /&gt;
== Logging a specific extension ==&lt;br /&gt;
Sometimes it may be useful to log the errors to a specific file. In this case you can &lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             //Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.errors.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        //Sets all JLog messages to be set to the file&lt;br /&gt;
        JLog::ALL,&lt;br /&gt;
        //Chooses a category name&lt;br /&gt;
        &#039;com_helloworld&#039;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Now remember to change the category when you add a log. Such as in the example below.&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;com_helloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
Note you may wish to combine this with the [[Display error messages and notices]] section to display visable error notifications to users.&lt;br /&gt;
&lt;br /&gt;
== Logging specific priorities ==&lt;br /&gt;
&lt;br /&gt;
You can also add an additional logger to capture only critical and emergency log notifications.&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             //Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        //Sets critical and emergency JLog messages to be set to the file&lt;br /&gt;
        JLog::CRITICAL + JLog::EMERGENCY,&lt;br /&gt;
        //Chooses a category name&lt;br /&gt;
        &#039;com_helloworld&#039;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Joomla! 3.0]]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout&amp;diff=102804</id>
		<title>J3.x:Sharing layouts across views or extensions with JLayout</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout&amp;diff=102804"/>
		<updated>2013-08-30T08:11:40Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: woopsy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version/tutor|3.x}}&lt;br /&gt;
&lt;br /&gt;
It is common that parts of pages are replicated across several views inside an extension, or even across several extensions. Examples might be:&lt;br /&gt;
&lt;br /&gt;
* an extension sharing some display layouts between front-end and backend views, or with one or more modules&lt;br /&gt;
* backend extensions that have some common settings, and thus have to replicate common display layouts to allow users to change them&lt;br /&gt;
&lt;br /&gt;
Up until Joomla! 3.0, the loading (and template overriding) of layout files was restricted to a given view.&lt;br /&gt;
The JLayout interface and set of classes was added to Joomla! 3.0 to help solve this very problem. It encapsulates a layout and the data required to display it so that they can be reused across views and extensions.&lt;br /&gt;
At the time of writing, JLayout is used by the JHtmlSidebar class to display the submenu and filters found in most backend extensions pages.&lt;br /&gt;
&lt;br /&gt;
JLayout consists in an interface and 2 classes:&lt;br /&gt;
&lt;br /&gt;
* JLayout interface defines escape and render methods, much like the JView class of Joomla! platform&lt;br /&gt;
* JLayoutBase implements a basic layout class, where layout may be hardcoded in the class itself for instance&lt;br /&gt;
* JLayoutFile, the most commonly used class, wraps and render a layout stored in a file, checking for overrides in template before doing so.&lt;br /&gt;
&lt;br /&gt;
Here is a basic usage example of JLayoutFile:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;// Create a layout object and ask it to render the sidebar&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.sidebars.submenu&#039;, $basePath = null);&lt;br /&gt;
$sidebarHtml = $layout-&amp;gt;render($data);&amp;lt;/source&amp;gt;&lt;br /&gt;
Executing this code creates a JLayoutFile object, wrapping a layout file, and passing in a $data structure that may be required for the display itself.&lt;br /&gt;
&lt;br /&gt;
The first parameter, &#039;joomla.sidebars.submenu&#039; is the file identifier. The last part (&#039;submenu&#039;)is the file name, everything before (&#039;joomla.sidebars&#039;) is the relative path. An optional $basePath parameter can be prepended to the relative path. If $basePath is missing, layout files will be searched inside the /layouts directory.&lt;br /&gt;
&lt;br /&gt;
Our example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;new JLayoutFile(&#039;joomla.sidebars.submenu&#039;, $basePath = null)&amp;lt;/source&amp;gt;will result in the &#039;submenu.php&#039; layout file being loaded from the &#039;/layouts/joomla/sidebars&#039; directory.&lt;br /&gt;
&lt;br /&gt;
Passing in a non-empty base path allows accessing and storing layout files anywhere on the site directory structure, for instance:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$layout = new JLayoutFile(&#039;my_layout&#039;, $basePath = JPATH_ROOT .&#039;/components/com_something/layouts&#039;);&lt;br /&gt;
$html = $layout-&amp;gt;render($data);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will load and render the &#039;my_layout.php&#039; layout file found in  JPATH_ROOT .&#039;/components/com_something/layouts&#039; directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Template overrides:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When executing the render() method, that is actually loading the layout file, JLayoutFile will check for the existence of an override in the currently selected template, inside a &#039;layouts&#039; directory. Looking back at our initial example, should you want to override the sidebar layout of all backend Joomla! extensions, you should place a &#039;submenu.php&#039; file under:&lt;br /&gt;
/administrator/templates/{currently_selected_template}/html/layouts/joomla/sidebars/&lt;br /&gt;
&lt;br /&gt;
Note: JLayoutFile will check the currently selected template for overrides. As layouts can be shared across both front end and backend side, if you need to override a layout file in both cases, you&#039;ll have to put an override file in both backend and front end template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Storing layouts:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Layouts files can basically be stored anywhere, as a full base path can be specified when using them (and still allow template override). However, for consistency and to avoid name clashes, we would recommend the following:&lt;br /&gt;
&lt;br /&gt;
* default to storing layout files in your extension own admin layouts folder. For instance: /administrator/components/com_example/layouts&lt;br /&gt;
* if your extension doesn&#039;t have an administrative folder (front-end only component, module, plugin), then use a layouts folder such as:&lt;br /&gt;
**/components/com_example/layouts&lt;br /&gt;
**/plugins/content/example/layouts&lt;br /&gt;
**/modules/mod_example/layouts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, note that the folder itself MUST be named &#039;&#039;&#039;layouts&#039;&#039;&#039;.&lt;br /&gt;
Using the root /layouts folder is normally reserved for Joomla! itself, and possibly other &amp;quot;official&amp;quot; applications in the future such as the installer for instance.&lt;br /&gt;
Lastly, though not mandatory, I advise you put all your layout files under an additional &amp;quot;com_example&amp;quot; or &amp;quot;mod_example&amp;quot; sub folder inside the main &amp;quot;layouts&amp;quot; folder. This serves no purpose for your extension, however, should a template override layouts for several extensions, this would avoid possible name collisions.&lt;br /&gt;
For instance, if 2 extensions use the &amp;quot;filters.search_all&amp;quot; JLayout, then a template cannot provide a separate override for each. A single override will be used for both extension, which may not be desirable.&lt;br /&gt;
Using &amp;quot;com_example_1.filters.search_all&amp;quot; and &amp;quot;com_example_2.filters.search_all&amp;quot; allows templates to provide overrides for layouts, even if they have the same id.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here is a very simple example.&lt;br /&gt;
&lt;br /&gt;
Create a file, /layouts/joomla/content/helloworld.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;helloworld&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in any layout file, such as components/com_content/views/article/tmpl/default.php add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.content.helloworld&#039;);&lt;br /&gt;
echo $layout-&amp;gt;render();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
View an article on the front end and you will see Hello World!.&lt;br /&gt;
Of course often you will want to pass some data via the render() method.&lt;br /&gt;
&lt;br /&gt;
A simple example of that might be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;helloworld&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Hello &amp;lt;?php echo $displayData[&#039;name&#039;]; ?&amp;gt;!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Note that the variable passed in to the layout is called $displayData)&lt;br /&gt;
&lt;br /&gt;
With the corresponding PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.content.helloworld&#039;);&lt;br /&gt;
$data = array(&#039;name&#039; =&amp;gt; &#039;Bob&#039;);&lt;br /&gt;
echo $layout-&amp;gt;render($data);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now when you view your article you should see: Hello Bob!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]][[Category:Tutorials]][[Category:Template Development]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout&amp;diff=102803</id>
		<title>J3.x:Sharing layouts across views or extensions with JLayout</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout&amp;diff=102803"/>
		<updated>2013-08-30T08:11:00Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: added example using $displayData&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version/tutor|3.x}}&lt;br /&gt;
&lt;br /&gt;
It is common that parts of pages are replicated across several views inside an extension, or even across several extensions. Examples might be:&lt;br /&gt;
&lt;br /&gt;
* an extension sharing some display layouts between front-end and backend views, or with one or more modules&lt;br /&gt;
* backend extensions that have some common settings, and thus have to replicate common display layouts to allow users to change them&lt;br /&gt;
&lt;br /&gt;
Up until Joomla! 3.0, the loading (and template overriding) of layout files was restricted to a given view.&lt;br /&gt;
The JLayout interface and set of classes was added to Joomla! 3.0 to help solve this very problem. It encapsulates a layout and the data required to display it so that they can be reused across views and extensions.&lt;br /&gt;
At the time of writing, JLayout is used by the JHtmlSidebar class to display the submenu and filters found in most backend extensions pages.&lt;br /&gt;
&lt;br /&gt;
JLayout consists in an interface and 2 classes:&lt;br /&gt;
&lt;br /&gt;
* JLayout interface defines escape and render methods, much like the JView class of Joomla! platform&lt;br /&gt;
* JLayoutBase implements a basic layout class, where layout may be hardcoded in the class itself for instance&lt;br /&gt;
* JLayoutFile, the most commonly used class, wraps and render a layout stored in a file, checking for overrides in template before doing so.&lt;br /&gt;
&lt;br /&gt;
Here is a basic usage example of JLayoutFile:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;// Create a layout object and ask it to render the sidebar&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.sidebars.submenu&#039;, $basePath = null);&lt;br /&gt;
$sidebarHtml = $layout-&amp;gt;render($data);&amp;lt;/source&amp;gt;&lt;br /&gt;
Executing this code creates a JLayoutFile object, wrapping a layout file, and passing in a $data structure that may be required for the display itself.&lt;br /&gt;
&lt;br /&gt;
The first parameter, &#039;joomla.sidebars.submenu&#039; is the file identifier. The last part (&#039;submenu&#039;)is the file name, everything before (&#039;joomla.sidebars&#039;) is the relative path. An optional $basePath parameter can be prepended to the relative path. If $basePath is missing, layout files will be searched inside the /layouts directory.&lt;br /&gt;
&lt;br /&gt;
Our example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;new JLayoutFile(&#039;joomla.sidebars.submenu&#039;, $basePath = null)&amp;lt;/source&amp;gt;will result in the &#039;submenu.php&#039; layout file being loaded from the &#039;/layouts/joomla/sidebars&#039; directory.&lt;br /&gt;
&lt;br /&gt;
Passing in a non-empty base path allows accessing and storing layout files anywhere on the site directory structure, for instance:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$layout = new JLayoutFile(&#039;my_layout&#039;, $basePath = JPATH_ROOT .&#039;/components/com_something/layouts&#039;);&lt;br /&gt;
$html = $layout-&amp;gt;render($data);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will load and render the &#039;my_layout.php&#039; layout file found in  JPATH_ROOT .&#039;/components/com_something/layouts&#039; directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Template overrides:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When executing the render() method, that is actually loading the layout file, JLayoutFile will check for the existence of an override in the currently selected template, inside a &#039;layouts&#039; directory. Looking back at our initial example, should you want to override the sidebar layout of all backend Joomla! extensions, you should place a &#039;submenu.php&#039; file under:&lt;br /&gt;
/administrator/templates/{currently_selected_template}/html/layouts/joomla/sidebars/&lt;br /&gt;
&lt;br /&gt;
Note: JLayoutFile will check the currently selected template for overrides. As layouts can be shared across both front end and backend side, if you need to override a layout file in both cases, you&#039;ll have to put an override file in both backend and front end template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Storing layouts:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Layouts files can basically be stored anywhere, as a full base path can be specified when using them (and still allow template override). However, for consistency and to avoid name clashes, we would recommend the following:&lt;br /&gt;
&lt;br /&gt;
* default to storing layout files in your extension own admin layouts folder. For instance: /administrator/components/com_example/layouts&lt;br /&gt;
* if your extension doesn&#039;t have an administrative folder (front-end only component, module, plugin), then use a layouts folder such as:&lt;br /&gt;
**/components/com_example/layouts&lt;br /&gt;
**/plugins/content/example/layouts&lt;br /&gt;
**/modules/mod_example/layouts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, note that the folder itself MUST be named &#039;&#039;&#039;layouts&#039;&#039;&#039;.&lt;br /&gt;
Using the root /layouts folder is normally reserved for Joomla! itself, and possibly other &amp;quot;official&amp;quot; applications in the future such as the installer for instance.&lt;br /&gt;
Lastly, though not mandatory, I advise you put all your layout files under an additional &amp;quot;com_example&amp;quot; or &amp;quot;mod_example&amp;quot; sub folder inside the main &amp;quot;layouts&amp;quot; folder. This serves no purpose for your extension, however, should a template override layouts for several extensions, this would avoid possible name collisions.&lt;br /&gt;
For instance, if 2 extensions use the &amp;quot;filters.search_all&amp;quot; JLayout, then a template cannot provide a separate override for each. A single override will be used for both extension, which may not be desirable.&lt;br /&gt;
Using &amp;quot;com_example_1.filters.search_all&amp;quot; and &amp;quot;com_example_2.filters.search_all&amp;quot; allows templates to provide overrides for layouts, even if they have the same id.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here is a very simple example.&lt;br /&gt;
&lt;br /&gt;
Create a file, /layouts/joomla/content/helloworld.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;helloworld&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in any layout file, such as components/com_content/views/article/tmpl/default.php add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.content.helloworld&#039;);&lt;br /&gt;
echo $layout-&amp;gt;render();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
View an article on the front end and you will see Hello World!.&lt;br /&gt;
Of course often you will want to pass some data via the render() method.&lt;br /&gt;
&lt;br /&gt;
A simple example of that might be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;helloworld&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Hello $displayData[&#039;name&#039;]!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Note that the variable passed in to the layout is called $displayData)&lt;br /&gt;
&lt;br /&gt;
With the corresponding PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$layout      = new JLayoutFile(&#039;joomla.content.helloworld&#039;);&lt;br /&gt;
$data = array(&#039;name&#039; =&amp;gt; &#039;Bob&#039;);&lt;br /&gt;
echo $layout-&amp;gt;render($data);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now when you view your article you should see: Hello Bob!.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]][[Category:Tutorials]][[Category:Template Development]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67735</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67735"/>
		<updated>2012-06-19T09:06:35Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download the domPDF library ===&lt;br /&gt;
&lt;br /&gt;
Download the  domPDF library from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Create the PDF document class ===&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		//set the font cache directory to Joomla&#039;s tmp directory&lt;br /&gt;
		$config = JFactory::getConfig();&lt;br /&gt;
		if (!defined(&#039;DOMPDF_FONT_CACHE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_FONT_CACHE&#039;, $config-&amp;gt;get(&#039;tmp_path&#039;));&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying document renderer files ===&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a PDF view for your component ===&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting the file name ===&lt;br /&gt;
&lt;br /&gt;
By default the PDF file will download as joomla.pdf. To change this:&lt;br /&gt;
&lt;br /&gt;
* Open you view.pdf.php file&lt;br /&gt;
*inside its display() method add this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$document = JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;setName(&#039;mypdf&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the PDF will now download as mypdf.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Portal:Component_Development&amp;diff=67602</id>
		<title>Portal:Component Development</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Portal:Component_Development&amp;diff=67602"/>
		<updated>2012-06-12T21:12:52Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Other component topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Recommended Reading ==&lt;br /&gt;
=== General ===&lt;br /&gt;
* [[Joomla Beginning Developer Course]]&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
=== Specific ===&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
====Developing a Model-View-Controller (MVC) Component {{JVer|1.5}}====&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
* [[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
====Developing a Model-View-Controller (MVC) Component {{JVer|1.6}}====&lt;br /&gt;
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6|Introduction]]&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
====Other component topics====&lt;br /&gt;
* [[File Structure and Naming Conventions]]&lt;br /&gt;
* [[Component Program Flow]]. UML sequence diagrams showing the control flow for a component. {{JVer|1.5}}&lt;br /&gt;
* [[Component parameters]]&lt;br /&gt;
* [[Components:xml installfile]].  An example component XML installation file. {{JVer|1.5}}&lt;br /&gt;
* [[Manifest files]] for the installation of extensions {{JVer|1.6}}&lt;br /&gt;
* [[Supporting SEF URLs in your component]]&lt;br /&gt;
* [[Supporting plugins in your component]]&lt;br /&gt;
* [[Using JPagination in your component]]&lt;br /&gt;
* [[Adding sortable columns to a table in a component]]&lt;br /&gt;
* [[How to use the JPane classes in a component]] {{JVer|1.5}}&lt;br /&gt;
* [[How to use the JHtmlTabs in a component]]&lt;br /&gt;
* [[How to use the editor in a component]]&lt;br /&gt;
* [[Adding AJAX to your component]]&lt;br /&gt;
* [[Ajax using MooTools]]&lt;br /&gt;
* [[How to add breadcrumbs]]&lt;br /&gt;
* [[How to send email from components]]&lt;br /&gt;
* [[How to use the JToolBar class in the frontend]]&lt;br /&gt;
* [[Creating a toolbar for your component]]&lt;br /&gt;
* [[Creating a file uploader in your component]]&lt;br /&gt;
* [[Adding Javascript moo.fx to your component]]&lt;br /&gt;
* [[Adding view layout configuration parameters]]&lt;br /&gt;
* [[Using a custom image in the menu bar title]]&lt;br /&gt;
* [[How to implement XML-RPC in a component]]&lt;br /&gt;
* [[Using multiple models in an MVC component]]&lt;br /&gt;
* [[Adding ACL rules to your component]] {{JVer|1.7}}&lt;br /&gt;
* [[How to create a modal form field in 1.6/1.7]] {{JVer|1.6}} {{JVer|1.7}}&lt;br /&gt;
* [[JController and its subclass usage overview]] {{JVer|1.6}} {{JVer|1.7}}&lt;br /&gt;
* [[Managing Component Updates with Joomla!1.6 - Part 1]] {{JVer|1.6}}&lt;br /&gt;
* [[Xml-rpc changes in Joomla! 1.6]] {{JVer|1.6}}&lt;br /&gt;
* [[How to create PDF views]]{{JVer|2.5}}&lt;br /&gt;
* [[Components:jform fields]]. and their usage {{JVer|2.5}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&amp;lt;small&amp;gt;List of all articles belonging to the categories &amp;quot;Tutorials&amp;quot; AND &amp;quot;Component Development&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
noresultsheader=\n  &lt;br /&gt;
format   = ,\n* [[%PAGE%|%TITLE%]],,&lt;br /&gt;
category=Tutorials&lt;br /&gt;
category=Component Development&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&amp;lt;small&amp;gt;List of all articles belonging to the categories &amp;quot;FAQ&amp;quot; AND &amp;quot;Component Development&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
noresultsheader=\n  &lt;br /&gt;
format   = ,\n* [[%PAGE%|%TITLE%]],,&lt;br /&gt;
category=FAQ&lt;br /&gt;
category=Component Development&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Portal:Developers&amp;diff=67601</id>
		<title>Portal:Developers</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Portal:Developers&amp;diff=67601"/>
		<updated>2012-06-12T21:11:58Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Suggested topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
{{Chunk:Developer profile}}&lt;br /&gt;
&lt;br /&gt;
A complete contents list of all pages of interest to developers can be found in the [[:Category:Development|development category]].&lt;br /&gt;
&lt;br /&gt;
== Reference Material ==&lt;br /&gt;
&lt;br /&gt;
* [[Framework|Joomla Framework]].&lt;br /&gt;
* [http://api.joomla.org API documentation] automatically generated using phpDocumentor.&lt;br /&gt;
&lt;br /&gt;
== Joomla Magazine Articles ==&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Apr-2012/item/709-Check-username-availability-with-Ajax Check username availability with Ajax]&lt;br /&gt;
* [http://magazine.joomla.org/issues/issue-feb-2012/item/671-Developing-a-Smart-Search-Plugin Developing a Smart Search plugin]&lt;br /&gt;
* [http://magazine.joomla.org/issues/issue-feb-2012/item/667-Customizing-an-Extensions-Edit-Screen Customising an extension&#039;s edit screen]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Jan-2012/item/652-Integrating-WebSocket-to-Joomla Integrating WebSocket to Joomla]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Jan-2012/item/648-Customising-Joomla-Help Customising Joomla help]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Dec-2011/item/616-Write-your-own-App-using-Joomla-Platform Write you own app using the Joomla Platform]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Nov-2011/item/591-Sorting-Articles-by-Recently-Touched-Date Sorting articles by recently touched date]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/447-using-doctrine-ORM-in-joomla Using Doctrine ORM in Joomla]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/429-templates-within-templates Rapid development techniques - Templates within templates]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/349-removing-mootools Rapid development techniques - Removing MooTools]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/325-Rapid-Development-Techniques-Preventing-Code-Fragmentation Rapid development techniques - Preventing code fragmentation]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/145-extending-joomla-mvc-architecture Extending Joomla&#039;s MVC architecture]&lt;br /&gt;
&lt;br /&gt;
== Articles and Tutorials ==&lt;br /&gt;
&lt;br /&gt;
 {{underconstruction}} &lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* [[Setting up your workstation for PHP development]].  A step-by-step guide to configure a PHP development environment.&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [[Setting up your workstation for extension development]] A guide to Joomla Extension development&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Extension development using eclipse and phing]] This article explains one way in which you can set up your workstation for writing Joomla! extensions. It assumes that you are using Eclipse and that you are familiar with using Eclipse for working with Joomla! and Subversion. For more information about the basics of getting started with Eclipse for Joomla! development.&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Running Automated Tests for Version 1.6]] {{JVer|1.6}}&lt;br /&gt;
* [[How to debug your code]] ([[Do not use die to debug]]!)&lt;br /&gt;
* [[Joomla Beginning Developer Course]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
=== Migration ===&lt;br /&gt;
* [[Adapting a Joomla 1.0 extension to Joomla 1.5]]&lt;br /&gt;
* [[Adapting a Joomla 1.5 extension to Joomla 1.6]]&lt;br /&gt;
* [[Version 1.6 Developer Notes]]&lt;br /&gt;
* [[Making single installation packages for Joomla! 1.5, 1.6 and 1.7]]&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
{{RecReading|Component|dev|topic}}&lt;br /&gt;
=== Modules ===&lt;br /&gt;
{{RecReading|Module|dev|topic}}&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
{{RecReading|Plugin|dev|topic}}&lt;br /&gt;
=== Templates ===&lt;br /&gt;
{{RecReading|Template|dev|topic}}&lt;br /&gt;
===Parameters===&lt;br /&gt;
* [[Standard parameter types]]&lt;br /&gt;
* [[Custom parameter types]]&lt;br /&gt;
* [[Component parameters]]&lt;br /&gt;
* [[Creating custom template parameter types]]&lt;br /&gt;
* See also: [[:Category:Parameters]]&lt;br /&gt;
* See also: [[:Form field]]&lt;br /&gt;
&lt;br /&gt;
=== Core extensions summary ===&lt;br /&gt;
* [[Banner component]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
* [[How to add CSRF anti-spoofing to forms]]&lt;br /&gt;
* [http://developer.joomla.org/tutorials/181-preventing-sql-injections.html Preventing SQL Injections]&lt;br /&gt;
* [[Securing Joomla extensions]]&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
* [[Accessing the database using JDatabase]]&lt;br /&gt;
* [[Using the JTable class]]&lt;br /&gt;
* [[Connecting to an external database]]&lt;br /&gt;
* [[Using nested sets]]&lt;br /&gt;
&lt;br /&gt;
=== Localisation ===&lt;br /&gt;
* [http://community.joomla.org/magazine/article/508-developer-localization-advancements-in-joomla-15.html Localization Advancements in Joomla! 1.5]&lt;br /&gt;
* [[Adding multi-language support]]&lt;br /&gt;
* [[Language Guidelines for 3rd Party Extensions]]&lt;br /&gt;
* [[Adding Joomfish functionality to custom components]]&lt;br /&gt;
* [[Specification of language files]] {{JVer|1.6}}&lt;br /&gt;
* [[Language Metadata]] {{JVer|1.6}}&lt;br /&gt;
* [[Loading extra language files]]&lt;br /&gt;
&lt;br /&gt;
=== Access Control ===&lt;br /&gt;
* [[Access Control System In Joomla 1.6]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
* [[How to use the filesystem package]]&lt;br /&gt;
* [[API Execution Order]]&lt;br /&gt;
* [[Accessing the current user object]]&lt;br /&gt;
* [[Adding JavaScript and CSS to the page]]&lt;br /&gt;
* [[Constants]] used in the Joomla [[Framework]].&lt;br /&gt;
* [[Client-side form validation]]&lt;br /&gt;
* [[How to create a custom button]]&lt;br /&gt;
* [[How to create a stand-alone application using the Joomla! Framework]]&lt;br /&gt;
* [[How to use user state variables]]&lt;br /&gt;
* [[Adding template overridable images in your extension]]&lt;br /&gt;
* [[Retrieving data from GET and POST requests]]&lt;br /&gt;
* [[Cache]] and [[Using caching to speed up your code]]&lt;br /&gt;
* [[Using the installer API to support package installation]]&lt;br /&gt;
* [[How to add tooltips to your Joomla! website]]&lt;br /&gt;
* [[Display error messages and notices]].&lt;br /&gt;
* [[Errors]]&lt;br /&gt;
* [[Creating a custom form field type]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
== Contributing to Joomla Development ==&lt;br /&gt;
The development of Joomla itself is carried out by the [[Development Working Group]] and third party developers.&lt;br /&gt;
&lt;br /&gt;
* [[Participating in the community]]: a brief description of how people can get involved.&lt;br /&gt;
* [[Developer Email lists]]: a list of email lists for developers, including third party developers.&lt;br /&gt;
* [[Coding style and standards]] (To be reviewed).&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://docs.joomla.org/Setting_up_your_workstation_for_Joomla!_development_--_Part_2#Check_Out_Joomla.21_Source_Code How to check out SVN Code]&lt;br /&gt;
* [[Patch submission guidelines]].&lt;br /&gt;
* [[Filing bugs and issues]].&lt;br /&gt;
* [[How to release a distribution tarball]].&lt;br /&gt;
* [[How to create a continuous integration]].&lt;br /&gt;
&lt;br /&gt;
== Contributing to Joomla Developer Documentation ==&lt;br /&gt;
The development of Joomla developer documentation is carried out primarily by the [[Documentation Working Group]].  There are currently two sub-projects of interest to developers:&lt;br /&gt;
* [[Joomla! 1.5 Template Tutorials Project]]&lt;br /&gt;
* [[API Reference Project]]&lt;br /&gt;
&lt;br /&gt;
When creating a new page, ensure you place the following marker at the bottom of the page so it is included in the category list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Development]]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you locate other articles you think are relevant to developers, please add this marker to those pages.&lt;br /&gt;
&lt;br /&gt;
=== Suggested topics ===&lt;br /&gt;
This is a short list of articles that might be written to support developers.  Please feel free to add further topic ideas.&lt;br /&gt;
&lt;br /&gt;
* [[Adding configuration objects to modules and plugins]].&lt;br /&gt;
* [[Storing data in the session between page loads]].&lt;br /&gt;
* [[Suppressing output of extra HTML]].&lt;br /&gt;
* [[How to use the filter package]].&lt;br /&gt;
*: Describe how and when to use the Filter package and explain what needs to be filtered for various situations (for queries, for URLs, etc)&lt;br /&gt;
* [[How to use the registry package]]&lt;br /&gt;
* [[How to use JSimpleXML]].&lt;br /&gt;
*: How to load and store XML files and how to work with them&lt;br /&gt;
* [[How to create component feeds]] (RSS/ATOM)&lt;br /&gt;
* [[How to generate paths for client side and server side]]&lt;br /&gt;
* [[How to access information from the request]]&lt;br /&gt;
*: This focuses on using the JBrowser class to retrieve information about the features available in the user&#039;s browser.&lt;br /&gt;
* [[How to create an editor plugin]]&lt;br /&gt;
* [[What can be done with a user plugin]]&lt;br /&gt;
* [[How to work with parameters]]&lt;br /&gt;
* [[How to cloak email addresses]]&lt;br /&gt;
* [[Using the caching system in your component]]. This might be enough (for now?) -&amp;gt; [[Cache]]&lt;br /&gt;
* [[Extending Joomla&#039;s MVC Architecture]]&lt;br /&gt;
&lt;br /&gt;
==Joomla Security Guide==&lt;br /&gt;
Developers should also be aware of security issues.&lt;br /&gt;
{{Security Guide}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:JED]]&lt;br /&gt;
[[Category:Joomla! user profiles]]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67600</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67600"/>
		<updated>2012-06-12T21:11:06Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download the domPDF library ===&lt;br /&gt;
&lt;br /&gt;
Download the  domPDF library from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Create the PDF document class ===&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying document renderer files ===&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a PDF view for your component ===&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting the file name ===&lt;br /&gt;
&lt;br /&gt;
By default the PDF file will download as joomla.pdf. To change this:&lt;br /&gt;
&lt;br /&gt;
* Open you view.pdf.php file&lt;br /&gt;
*inside its display() method add this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$document = JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;setName(&#039;mypdf&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the PDF will now download as mypdf.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67597</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67597"/>
		<updated>2012-06-12T18:43:07Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download the domPDF library ===&lt;br /&gt;
&lt;br /&gt;
Download the  domPDF library from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Create the PDF document class ===&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coping document renderer files ===&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a PDF view for your component ===&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting the file name ===&lt;br /&gt;
&lt;br /&gt;
By default the PDF file will download as joomla.pdf. To change this:&lt;br /&gt;
&lt;br /&gt;
* Open you view.pdf.php file&lt;br /&gt;
*inside its display() method add this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$document = JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;setName(&#039;mypdf&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the PDF will now download as mypdf.pdf&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67596</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67596"/>
		<updated>2012-06-12T18:41:08Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download the domPDF library ===&lt;br /&gt;
&lt;br /&gt;
Download the  domPDF library from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Create the PDF document class ===&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Coping document renderer files ==&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a PDF view for your component ===&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting the file name ===&lt;br /&gt;
&lt;br /&gt;
By default the PDF file will download as joomla.pdf. To change this:&lt;br /&gt;
&lt;br /&gt;
* Open you view.pdf.php file&lt;br /&gt;
*inside its display() method add this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$document = JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;setName(&#039;mypdf&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the PDF will now download as mypdf.pdf&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67595</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67595"/>
		<updated>2012-06-12T18:40:49Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download the domPDF library == =&lt;br /&gt;
&lt;br /&gt;
Download the  domPDF library from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Create the PDF document class ===&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Coping document renderer files ==&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a PDF view for your component ===&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting the file name ===&lt;br /&gt;
&lt;br /&gt;
By default the PDF file will download as joomla.pdf. To change this:&lt;br /&gt;
&lt;br /&gt;
* Open you view.pdf.php file&lt;br /&gt;
*inside its display() method add this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$document = JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;setName(&#039;mypdf&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the PDF will now download as mypdf.pdf&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67594</id>
		<title>J2.5:Creating PDF views</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Creating_PDF_views&amp;diff=67594"/>
		<updated>2012-06-12T18:33:54Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: Created page with &amp;quot;Download the domPDF library for rendering the PDF from https://code.google.com/p/dompdf/downloads/list  (As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download the domPDF library for rendering the PDF from https://code.google.com/p/dompdf/downloads/list&lt;br /&gt;
&lt;br /&gt;
(As of the time of writing the latest version of domPDF was DOMPDF 0.6.0 beta 3)&lt;br /&gt;
&lt;br /&gt;
Open the downloaded zip folder and copy the &#039;dompdf&#039; folder to your site &#039;libraries/&#039; folder.&lt;br /&gt;
&lt;br /&gt;
Next, we will create the Joomla PDF document class.&lt;br /&gt;
&lt;br /&gt;
* Create a folder /libraries/joomla/document/pdf&lt;br /&gt;
* create a file called &#039;pdf.php&#039; in this folder.&lt;br /&gt;
* Open the file and paste in this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn&lt;br /&gt;
 * @license		GNU/GPL, see LICENSE.php&lt;br /&gt;
 * Joomla! is free software. This version may have been modified pursuant&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 * See COPYRIGHT.php for copyright notices and details.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is within the rest of the framework&lt;br /&gt;
defined(&#039;JPATH_BASE&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
require_once(JPATH_LIBRARIES .&#039;/joomla/document/html/html.php&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * DocumentPDF class, provides an easy interface to parse and display a pdf document&lt;br /&gt;
 *&lt;br /&gt;
 * @package		Joomla.Framework&lt;br /&gt;
 * @subpackage	Document&lt;br /&gt;
 * @since		1.5&lt;br /&gt;
 */&lt;br /&gt;
class JDocumentpdf extends JDocumentHTML&lt;br /&gt;
{&lt;br /&gt;
	private $engine	= null;&lt;br /&gt;
&lt;br /&gt;
	private $name = &#039;joomla&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Class constructore&lt;br /&gt;
	 * @param	array	$options Associative array of options&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function __construct($options = array())&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct($options);&lt;br /&gt;
&lt;br /&gt;
		//set mime type&lt;br /&gt;
		$this-&amp;gt;_mime = &#039;application/pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		//set document type&lt;br /&gt;
		$this-&amp;gt;_type = &#039;pdf&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (!$this-&amp;gt;iniDomPdf())&lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, &#039;No PDF lib found&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected function iniDomPdf()&lt;br /&gt;
	{&lt;br /&gt;
		$file = JPATH_LIBRARIES .&#039;/dompdf/dompdf_config.inc.php&#039;;&lt;br /&gt;
		if (!JFile::exists($file))&lt;br /&gt;
		{&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		if (!defined(&#039;DOMPDF_ENABLE_REMOTE&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			define(&#039;DOMPDF_ENABLE_REMOTE&#039;, true);&lt;br /&gt;
		}&lt;br /&gt;
		require_once($file);&lt;br /&gt;
		// Default settings are a portrait layout with an A4 configuration using millimeters as units&lt;br /&gt;
		$this-&amp;gt;engine =new DOMPDF();&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the document name&lt;br /&gt;
	 * @param   string   $name	Document name&lt;br /&gt;
	 * @return  void&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function setName($name = &#039;joomla&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;name = $name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the document name&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getName()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Render the document.&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 * @param boolean 	$cache		If true, cache the output&lt;br /&gt;
	 * @param array		$params		Associative array of attributes&lt;br /&gt;
	 * @return	string&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	function render($cache = false, $params = array())&lt;br /&gt;
	{&lt;br /&gt;
		$pdf = $this-&amp;gt;engine;&lt;br /&gt;
		$data = parent::render();&lt;br /&gt;
 		$this-&amp;gt;fullPaths($data);&lt;br /&gt;
		//echo $data;exit;&lt;br /&gt;
		$pdf-&amp;gt;load_html($data);&lt;br /&gt;
		$pdf-&amp;gt;render();&lt;br /&gt;
		$pdf-&amp;gt;stream($this-&amp;gt;getName() . &#039;.pdf&#039;);&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * (non-PHPdoc)&lt;br /&gt;
	 * @see JDocumentHTML::getBuffer()&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	public function getBuffer($type = null, $name = null, $attribs = array())&lt;br /&gt;
	{&lt;br /&gt;
		if ($type == &#039;head&#039; || $type == &#039;component&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			return parent::getBuffer($type, $name, $attribs);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * parse relative images a hrefs and style sheets to full paths&lt;br /&gt;
	 * @param	string	&amp;amp;$data&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	private function fullPaths(&amp;amp;$data)&lt;br /&gt;
	{&lt;br /&gt;
		$data = str_replace(&#039;xmlns=&#039;, &#039;ns=&#039;, $data);&lt;br /&gt;
		libxml_use_internal_errors(true);&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			$ok = new SimpleXMLElement($data);&lt;br /&gt;
			if ($ok)&lt;br /&gt;
			{&lt;br /&gt;
				$uri = JUri::getInstance();&lt;br /&gt;
				$base = $uri-&amp;gt;getScheme() . &#039;://&#039; . $uri-&amp;gt;getHost();&lt;br /&gt;
				$imgs = $ok-&amp;gt;xpath(&#039;//img&#039;);&lt;br /&gt;
				foreach ($imgs as &amp;amp;$img)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($img[&#039;src&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$img[&#039;src&#039;] = $base . $img[&#039;src&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				//links&lt;br /&gt;
				$as = $ok-&amp;gt;xpath(&#039;//a&#039;);&lt;br /&gt;
				foreach ($as as &amp;amp;$a)&lt;br /&gt;
				{&lt;br /&gt;
					if (!strstr($a[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$a[&#039;href&#039;] = $base . $a[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			&lt;br /&gt;
				// css files.&lt;br /&gt;
				$links = $ok-&amp;gt;xpath(&#039;//link&#039;);&lt;br /&gt;
				foreach ($links as &amp;amp;$link)&lt;br /&gt;
				{&lt;br /&gt;
					if ($link[&#039;rel&#039;] == &#039;stylesheet&#039; &amp;amp;&amp;amp; !strstr($link[&#039;href&#039;], $base))&lt;br /&gt;
					{&lt;br /&gt;
						$link[&#039;href&#039;] = $base . $link[&#039;href&#039;];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$data = $ok-&amp;gt;asXML();&lt;br /&gt;
			}&lt;br /&gt;
		} catch (Exception $err)&lt;br /&gt;
		{&lt;br /&gt;
			//oho malformed html - if we are debugging the site then show the errors&lt;br /&gt;
			// otherwise continue, but it may mean that images/css/links are incorrect&lt;br /&gt;
			$errors = libxml_get_errors();&lt;br /&gt;
			if (JDEBUG)&lt;br /&gt;
			{&lt;br /&gt;
				echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;print_r($errors);echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
				exit;&lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This class extends the JDocumentHTML class.&lt;br /&gt;
&lt;br /&gt;
As it extends JDocumentHTML, you will need to copy the folder and contents of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libraries/joomla/document/html/renderer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;ibraries/joomla/document/pdf/renderer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for any component you wish to create a pdf view for you should&lt;br /&gt;
&lt;br /&gt;
* copy the view&#039;s view.html.php file and rename it to view.pdf.php.&lt;br /&gt;
&lt;br /&gt;
E.g. to make a PDF view of an article, copy:&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.html.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and rename it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;components/com_content/views/article/view.pdf.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to view a pdf article you need to append &#039;&#039;&#039;&amp;amp;format=pdf&#039;&#039;&#039; to your articles URL.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only want to output the components content to the PDF then you should add &#039;&#039;&#039;tmpl=component&#039;&#039;&#039; to the url:&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;http://localhost/index.php?option=com_content&amp;amp;view=article&amp;amp;id=4&amp;amp;format=pdf&amp;amp;tmpl=component&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=My_first_pull_request_to_Joomla!_on_Github&amp;diff=62878</id>
		<title>My first pull request to Joomla! on Github</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=My_first_pull_request_to_Joomla!_on_Github&amp;diff=62878"/>
		<updated>2011-11-07T22:13:14Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* GitHub */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A Pull Request ?? ==&lt;br /&gt;
So what the heck could be a &amp;quot;Pull Request&amp;quot; ? No, I bet it&#039;s not what you&#039;re thinking right now...&lt;br /&gt;
&lt;br /&gt;
A Pull Request is the Git Jargon meaning &amp;quot;I will send a &#039;&#039;&#039;request&#039;&#039;&#039; to a project, to &#039;&#039;&#039;pull&#039;&#039;&#039; in some code changes / additions I have made to their code base&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Got it ? This is how we (including you) are going to contribute source code to the Joomla! code base.&lt;br /&gt;
&lt;br /&gt;
It might look a bit scary at first (at least to me) but in the end it&#039;s pretty easy - &amp;quot;similar&amp;quot; to SVN, but a lot better.&lt;br /&gt;
&lt;br /&gt;
Here is how it works:&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The installation depends on the operating system you are using. If you use Linux, you may find the git software in your repository.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;example&#039;&#039;&#039; [http://opensuse.org OpenSuSE] offers a &amp;quot;pattern&amp;quot; named &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; that provides the git core (required) as well as a set of tools like [http://gitk.org gitk], an e-mail interface, scripts to import source code from other version control systems like svn and others.&lt;br /&gt;
&lt;br /&gt;
[[File:git-opensuse-install.png]]&lt;br /&gt;
&lt;br /&gt;
For more information about installing git on other operating systems see the GitHub site for [http://help.github.com/linux-set-up-git Linux], [http://help.github.com/mac-set-up-git Mac] and even [http://help.github.com/win-set-up-git Windows].&lt;br /&gt;
&lt;br /&gt;
For this tutorial you will also need [http://eclipse.org/pdt/ Eclipse PDT] with the [http://eclipse.org/egit/ eGit plugin] installed.&lt;br /&gt;
&lt;br /&gt;
== GitHub ==&lt;br /&gt;
For this tutorial we have created a GitHub user named &#039;&#039;&#039;&amp;lt;code&amp;gt;jlover&amp;lt;/code&amp;gt;&#039;&#039;&#039; - a dude who loves J :)&lt;br /&gt;
&lt;br /&gt;
He has already [http://help.github.com/fork-a-repo/ forked] the main repository so his repository is at: https://github.com/jlover/joomla-platform&lt;br /&gt;
&lt;br /&gt;
[[File:github-repo.png]]&lt;br /&gt;
&lt;br /&gt;
== Import your clone ==&lt;br /&gt;
Mr. JLover uses Linux and his Eclipse workspace is at &amp;lt;code&amp;gt;/home/jlover/workspace&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before eGit 1.0 it was not possible to create or clone repositories right into your workspace. To make things easier we set the default repository folder to our workspace.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-preferences-1.png]]&lt;br /&gt;
&lt;br /&gt;
Let&#039;s start. Go to your workspace, right click inside the PHP explorer and select &#039;&#039;&#039;Import...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import.png]]&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Git&#039;&#039;&#039; &amp;amp;rArr; &#039;&#039;&#039;Projects from Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-2.png]]&lt;br /&gt;
&lt;br /&gt;
Click on &#039;&#039;&#039;Clone...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Source repository ===&lt;br /&gt;
&lt;br /&gt;
In the window that opens up, copy and paste the HTTP URL from your GitHub repository. The remaining fields will be auto filled.&lt;br /&gt;
&lt;br /&gt;
Your may also want to supply your password but this is not required if you limit the write operations to the command line.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-4.png]]&lt;br /&gt;
&lt;br /&gt;
Select the branches you want to clone. The &#039;&#039;&#039;master&#039;&#039;&#039; branch is the &#039;&#039;point of truth&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-5.png]]&lt;br /&gt;
&lt;br /&gt;
=== Local destination ===&lt;br /&gt;
Now choose where you want to save the files. We will save them in our workspace and modify the default name joomla-platform to &#039;&#039;&#039;my-joomla-platform&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please remember this name, as we will use it later when we create our project in the same folder.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-6.png]]&lt;br /&gt;
&lt;br /&gt;
=== Receiving objects... ===&lt;br /&gt;
The files are being checked out. Sit back and watch patiently, or go for a cup of coffee ;)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-6-checkout.png]]&lt;br /&gt;
&lt;br /&gt;
Finished. Click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-7.png]]&lt;br /&gt;
&lt;br /&gt;
== New Project wizard ==&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Use the New Project wizard&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039; to start it (windows like..)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-create-project-1.png]]&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;PHP&#039;&#039;&#039; &amp;amp;rArr; &#039;&#039;&#039;PHP Project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-create-project-2.png]]&lt;br /&gt;
&lt;br /&gt;
For the Project name enter the name of the repository you previously cloned. &#039;&#039;&#039;my-joola-platform&#039;&#039;&#039; in our example.&lt;br /&gt;
&lt;br /&gt;
Observe the message beside the yellow triangle that appears when you finished inserting the Project name, telling you that the specified location already exists.&amp;lt;br /&amp;gt;&lt;br /&gt;
This is OK and expected.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-8.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039; and include other libraries if required.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-9.png]]&lt;br /&gt;
&lt;br /&gt;
== Finished ==&lt;br /&gt;
&lt;br /&gt;
After you click Finish, the new project will be created in your workspace.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to the Joomla! platform.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-10.png]]&lt;br /&gt;
&lt;br /&gt;
== The upstream repository ==&lt;br /&gt;
&lt;br /&gt;
OK. So far you have a local &amp;quot;clone&amp;quot; of your GitHub repository which is a fork of the main Joomla! repository.&lt;br /&gt;
&lt;br /&gt;
But what if the information in the main Joomla! repository changes ? Remember your fork (and your clone) are completely independent from the main repository. Fortunately git allows you to add multiple repositories to your &amp;quot;working copy&amp;quot; to track changes and merge them with your work.&lt;br /&gt;
&lt;br /&gt;
We are going to add the main repository and call it &#039;&#039;&#039;upstream&#039;&#039;&#039;. To do this I use the console because I have not figured out yet how to do this in eclipse (@todo?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/jlover/workspace/my-joomla-platform&lt;br /&gt;
git remote add upstream git://github.com/joomla/joomla-platform.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To „update“ your clone with the latest changes from the main repository use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git fetch upstream&lt;br /&gt;
git merge upstream/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will &#039;&#039;&#039;fetch&#039;&#039;&#039; the changes from the upstream repository and &#039;&#039;&#039;merge&#039;&#039;&#039; the upstream/master branch into your current branch.&lt;br /&gt;
&lt;br /&gt;
== Code away... ==&lt;br /&gt;
So what are you waiting for ? Go and fix this bug or implement this cool feature and give it back to the Joomla! project. It&#039;s as easy as clicking a button ;)&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
Let&#039;s create a simple patch file using Eclipse. We&#039;re going to add a comment line to a file that is really important to Joomla! and then create a pull request in GitHub to the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
So if the developers decide that your changes are worth being included into the code base, all they have to do is pushing a button and your name gets graved in stone (aka changelog) and the respective &#039;&#039;blame&#039;&#039; will show your name as the author for the lines of code you changed - Is this cute or what ?&lt;br /&gt;
&lt;br /&gt;
== Create a feature branch ==&lt;br /&gt;
Git provides a handy feature called [http://book.git-scm.com/3_basic_branching_and_merging.html Branches]. The concept is somewhat similar to SVN but the handling is completely different. This feature is also known as &#039;&#039;cheap branching&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
So if you plan to make more submissions or just to keep you master branch clean, you should create a new branch.&lt;br /&gt;
&lt;br /&gt;
Unfortunately Eclipses branching concept seems to differ a bit from the original. So I use the command line also for branching operations. @todo?&lt;br /&gt;
&lt;br /&gt;
The shortcut for creating and switching to a new branch is &amp;lt;code&amp;gt;checkout -b&amp;lt;/code&amp;gt; so we will create a new branch called &#039;&#039;&#039;&amp;lt;code&amp;gt;first-test&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/jlover/workspace/my-joomla-platform&lt;br /&gt;
git checkout -b first-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the tree has also changed in eclipse (maybe you need to refresh)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-tree-details.png]]&lt;br /&gt;
&lt;br /&gt;
OK we can now change whatever we want without &amp;quot;polluting&amp;quot; our original repository. The disk space required to do this is minimal. That&#039;s what is meant by &#039;&#039;cheap&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
== Change the code ==&lt;br /&gt;
Let&#039;s open the file &amp;lt;code&amp;gt;libraries/joomla/application/application.php&amp;lt;/code&amp;gt;. and make a test change.&lt;br /&gt;
&lt;br /&gt;
You really should feel a bit important right now doing changes to such an important Joomla! core file - do you ? ;).&lt;br /&gt;
&lt;br /&gt;
Note that after you save the file, a &#039;&#039;dirty&#039;&#039; marker &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; appears. You can change this in the configuration if you prefer the svn icon overlays.&lt;br /&gt;
&lt;br /&gt;
[[File:git-pull-test-change.png]]&lt;br /&gt;
&lt;br /&gt;
That looks good. Now here comes another new concept if you are new to git: To get your changes to you repository on GitHub &#039;&#039;&#039;&amp;lt;big&amp;gt;two steps&amp;lt;/big&amp;gt;&#039;&#039;&#039; are required:&lt;br /&gt;
&lt;br /&gt;
== Step 1 - Commit ==&lt;br /&gt;
This step will commit your changes to you &#039;&#039;&#039;local&#039;&#039;&#039; repository. You can do this from within eclipse selecting the file(s) or folders you want to include in the commit.&lt;br /&gt;
&lt;br /&gt;
Right click you project and select Team &amp;amp;rArr; Commit...&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-commit-1.png]]&lt;br /&gt;
&lt;br /&gt;
In the window that opens enter a meaningfull commit message&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-commit-2.png]]&lt;br /&gt;
&lt;br /&gt;
After you press &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt; note that the &#039;&#039;dirty&#039;&#039; marker &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; has disappeared.&lt;br /&gt;
&lt;br /&gt;
You may add as many commits as you like locally before submitting it to the server.&lt;br /&gt;
&lt;br /&gt;
Commit often.&lt;br /&gt;
&lt;br /&gt;
== Step 2 - Push ==&lt;br /&gt;
This step will submit your code to the GitHub server(s).&lt;br /&gt;
&lt;br /&gt;
We do this from the command line @todo?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git push origin first-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will push your changes to &#039;&#039;&#039;&amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;&#039;&#039;&#039; (your (jlovers) repository on GitHub) and create a new branch named &#039;&#039;&#039;&amp;lt;code&amp;gt;first-test&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Done. Your changes are on the internet. Let&#039;s check out the GitHub site&lt;br /&gt;
&lt;br /&gt;
[[File:git-pull-feed-1.png]]&lt;br /&gt;
&lt;br /&gt;
Looks good.&lt;br /&gt;
&lt;br /&gt;
A nice feature in eclipse is the history view&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-history-view.png]]&lt;br /&gt;
&lt;br /&gt;
== The Pull Request ==&lt;br /&gt;
At this point we are finally ready to do our pull request. Let&#039;s go to our repository, be sure that you are on the correct branch (you may change this later), and find the &#039;&#039;&#039;Pull Request&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
Push it softly, nothing will really happen yet ;)&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-1.png]]&lt;br /&gt;
&lt;br /&gt;
On the next screen you should enter a meaningful message to the developers.&lt;br /&gt;
&lt;br /&gt;
Pay attention to the text white on black that shows &#039;&#039;&#039;from&#039;&#039;&#039; and &#039;&#039;&#039;to&#039;&#039;&#039; which repository:branch you are going to send your pull request. By pushing the button &#039;&#039;&#039;Change Commits&#039;&#039;&#039; you may modify those values.&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-2.png]]&lt;br /&gt;
&lt;br /&gt;
Here you can preview the changes you are proposing.&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-3.png]]&lt;br /&gt;
&lt;br /&gt;
== Push the Button ==&lt;br /&gt;
Ok, we are ready to &#039;&#039;&#039;Push the Button&#039;&#039;&#039; [[File:Button_send_pull_request.png]]&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention and in advance for your contribution(s) to the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
== Play ==&lt;br /&gt;
The Joomla! CMS actually is also moving to GitHub. To get you up and running (yes You who are not familiar with this git and GitHub stuff yet), a &#039;&#039;playground branch&#039;&#039; has been created to...imagine: &#039;&#039;&#039;Play&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
https://github.com/joomla/joomla-cms/tree/playground&lt;br /&gt;
&lt;br /&gt;
So go on and &#039;&#039;&#039;play&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thanks for your attention.&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=My_first_pull_request_to_Joomla!_on_Github&amp;diff=62877</id>
		<title>My first pull request to Joomla! on Github</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=My_first_pull_request_to_Joomla!_on_Github&amp;diff=62877"/>
		<updated>2011-11-07T22:12:02Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Create a feature branch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A Pull Request ?? ==&lt;br /&gt;
So what the heck could be a &amp;quot;Pull Request&amp;quot; ? No, I bet it&#039;s not what you&#039;re thinking right now...&lt;br /&gt;
&lt;br /&gt;
A Pull Request is the Git Jargon meaning &amp;quot;I will send a &#039;&#039;&#039;request&#039;&#039;&#039; to a project, to &#039;&#039;&#039;pull&#039;&#039;&#039; in some code changes / additions I have made to their code base&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Got it ? This is how we (including you) are going to contribute source code to the Joomla! code base.&lt;br /&gt;
&lt;br /&gt;
It might look a bit scary at first (at least to me) but in the end it&#039;s pretty easy - &amp;quot;similar&amp;quot; to SVN, but a lot better.&lt;br /&gt;
&lt;br /&gt;
Here is how it works:&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The installation depends on the operating system you are using. If you use Linux, you may find the git software in your repository.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;example&#039;&#039;&#039; [http://opensuse.org OpenSuSE] offers a &amp;quot;pattern&amp;quot; named &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; that provides the git core (required) as well as a set of tools like [http://gitk.org gitk], an e-mail interface, scripts to import source code from other version control systems like svn and others.&lt;br /&gt;
&lt;br /&gt;
[[File:git-opensuse-install.png]]&lt;br /&gt;
&lt;br /&gt;
For more information about installing git on other operating systems see the GitHub site for [http://help.github.com/linux-set-up-git Linux], [http://help.github.com/mac-set-up-git Mac] and even [http://help.github.com/win-set-up-git Windows].&lt;br /&gt;
&lt;br /&gt;
For this tutorial you will also need [http://eclipse.org/pdt/ Eclipse PDT] with the [http://eclipse.org/egit/ eGit plugin] installed.&lt;br /&gt;
&lt;br /&gt;
== GitHub ==&lt;br /&gt;
For this tutorial we have created a GitHub user named &#039;&#039;&#039;&amp;lt;code&amp;gt;jlover&amp;lt;/code&amp;gt;&#039;&#039;&#039; - a dude who loves J :)&lt;br /&gt;
&lt;br /&gt;
He has already forked the main repository so his repository is at: https://github.com/jlover/joomla-platform&lt;br /&gt;
&lt;br /&gt;
[[File:github-repo.png]]&lt;br /&gt;
&lt;br /&gt;
== Import your clone ==&lt;br /&gt;
Mr. JLover uses Linux and his Eclipse workspace is at &amp;lt;code&amp;gt;/home/jlover/workspace&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before eGit 1.0 it was not possible to create or clone repositories right into your workspace. To make things easier we set the default repository folder to our workspace.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-preferences-1.png]]&lt;br /&gt;
&lt;br /&gt;
Let&#039;s start. Go to your workspace, right click inside the PHP explorer and select &#039;&#039;&#039;Import...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import.png]]&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Git&#039;&#039;&#039; &amp;amp;rArr; &#039;&#039;&#039;Projects from Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-2.png]]&lt;br /&gt;
&lt;br /&gt;
Click on &#039;&#039;&#039;Clone...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Source repository ===&lt;br /&gt;
&lt;br /&gt;
In the window that opens up, copy and paste the HTTP URL from your GitHub repository. The remaining fields will be auto filled.&lt;br /&gt;
&lt;br /&gt;
Your may also want to supply your password but this is not required if you limit the write operations to the command line.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-4.png]]&lt;br /&gt;
&lt;br /&gt;
Select the branches you want to clone. The &#039;&#039;&#039;master&#039;&#039;&#039; branch is the &#039;&#039;point of truth&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-5.png]]&lt;br /&gt;
&lt;br /&gt;
=== Local destination ===&lt;br /&gt;
Now choose where you want to save the files. We will save them in our workspace and modify the default name joomla-platform to &#039;&#039;&#039;my-joomla-platform&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please remember this name, as we will use it later when we create our project in the same folder.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-6.png]]&lt;br /&gt;
&lt;br /&gt;
=== Receiving objects... ===&lt;br /&gt;
The files are being checked out. Sit back and watch patiently, or go for a cup of coffee ;)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-6-checkout.png]]&lt;br /&gt;
&lt;br /&gt;
Finished. Click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-7.png]]&lt;br /&gt;
&lt;br /&gt;
== New Project wizard ==&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Use the New Project wizard&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039; to start it (windows like..)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-create-project-1.png]]&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;PHP&#039;&#039;&#039; &amp;amp;rArr; &#039;&#039;&#039;PHP Project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-create-project-2.png]]&lt;br /&gt;
&lt;br /&gt;
For the Project name enter the name of the repository you previously cloned. &#039;&#039;&#039;my-joola-platform&#039;&#039;&#039; in our example.&lt;br /&gt;
&lt;br /&gt;
Observe the message beside the yellow triangle that appears when you finished inserting the Project name, telling you that the specified location already exists.&amp;lt;br /&amp;gt;&lt;br /&gt;
This is OK and expected.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-8.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039; and include other libraries if required.&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-9.png]]&lt;br /&gt;
&lt;br /&gt;
== Finished ==&lt;br /&gt;
&lt;br /&gt;
After you click Finish, the new project will be created in your workspace.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to the Joomla! platform.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-import-10.png]]&lt;br /&gt;
&lt;br /&gt;
== The upstream repository ==&lt;br /&gt;
&lt;br /&gt;
OK. So far you have a local &amp;quot;clone&amp;quot; of your GitHub repository which is a fork of the main Joomla! repository.&lt;br /&gt;
&lt;br /&gt;
But what if the information in the main Joomla! repository changes ? Remember your fork (and your clone) are completely independent from the main repository. Fortunately git allows you to add multiple repositories to your &amp;quot;working copy&amp;quot; to track changes and merge them with your work.&lt;br /&gt;
&lt;br /&gt;
We are going to add the main repository and call it &#039;&#039;&#039;upstream&#039;&#039;&#039;. To do this I use the console because I have not figured out yet how to do this in eclipse (@todo?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/jlover/workspace/my-joomla-platform&lt;br /&gt;
git remote add upstream git://github.com/joomla/joomla-platform.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To „update“ your clone with the latest changes from the main repository use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git fetch upstream&lt;br /&gt;
git merge upstream/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will &#039;&#039;&#039;fetch&#039;&#039;&#039; the changes from the upstream repository and &#039;&#039;&#039;merge&#039;&#039;&#039; the upstream/master branch into your current branch.&lt;br /&gt;
&lt;br /&gt;
== Code away... ==&lt;br /&gt;
So what are you waiting for ? Go and fix this bug or implement this cool feature and give it back to the Joomla! project. It&#039;s as easy as clicking a button ;)&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
Let&#039;s create a simple patch file using Eclipse. We&#039;re going to add a comment line to a file that is really important to Joomla! and then create a pull request in GitHub to the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
So if the developers decide that your changes are worth being included into the code base, all they have to do is pushing a button and your name gets graved in stone (aka changelog) and the respective &#039;&#039;blame&#039;&#039; will show your name as the author for the lines of code you changed - Is this cute or what ?&lt;br /&gt;
&lt;br /&gt;
== Create a feature branch ==&lt;br /&gt;
Git provides a handy feature called [http://book.git-scm.com/3_basic_branching_and_merging.html Branches]. The concept is somewhat similar to SVN but the handling is completely different. This feature is also known as &#039;&#039;cheap branching&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
So if you plan to make more submissions or just to keep you master branch clean, you should create a new branch.&lt;br /&gt;
&lt;br /&gt;
Unfortunately Eclipses branching concept seems to differ a bit from the original. So I use the command line also for branching operations. @todo?&lt;br /&gt;
&lt;br /&gt;
The shortcut for creating and switching to a new branch is &amp;lt;code&amp;gt;checkout -b&amp;lt;/code&amp;gt; so we will create a new branch called &#039;&#039;&#039;&amp;lt;code&amp;gt;first-test&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/jlover/workspace/my-joomla-platform&lt;br /&gt;
git checkout -b first-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the tree has also changed in eclipse (maybe you need to refresh)&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-tree-details.png]]&lt;br /&gt;
&lt;br /&gt;
OK we can now change whatever we want without &amp;quot;polluting&amp;quot; our original repository. The disk space required to do this is minimal. That&#039;s what is meant by &#039;&#039;cheap&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
== Change the code ==&lt;br /&gt;
Let&#039;s open the file &amp;lt;code&amp;gt;libraries/joomla/application/application.php&amp;lt;/code&amp;gt;. and make a test change.&lt;br /&gt;
&lt;br /&gt;
You really should feel a bit important right now doing changes to such an important Joomla! core file - do you ? ;).&lt;br /&gt;
&lt;br /&gt;
Note that after you save the file, a &#039;&#039;dirty&#039;&#039; marker &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; appears. You can change this in the configuration if you prefer the svn icon overlays.&lt;br /&gt;
&lt;br /&gt;
[[File:git-pull-test-change.png]]&lt;br /&gt;
&lt;br /&gt;
That looks good. Now here comes another new concept if you are new to git: To get your changes to you repository on GitHub &#039;&#039;&#039;&amp;lt;big&amp;gt;two steps&amp;lt;/big&amp;gt;&#039;&#039;&#039; are required:&lt;br /&gt;
&lt;br /&gt;
== Step 1 - Commit ==&lt;br /&gt;
This step will commit your changes to you &#039;&#039;&#039;local&#039;&#039;&#039; repository. You can do this from within eclipse selecting the file(s) or folders you want to include in the commit.&lt;br /&gt;
&lt;br /&gt;
Right click you project and select Team &amp;amp;rArr; Commit...&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-commit-1.png]]&lt;br /&gt;
&lt;br /&gt;
In the window that opens enter a meaningfull commit message&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-commit-2.png]]&lt;br /&gt;
&lt;br /&gt;
After you press &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt; note that the &#039;&#039;dirty&#039;&#039; marker &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; has disappeared.&lt;br /&gt;
&lt;br /&gt;
You may add as many commits as you like locally before submitting it to the server.&lt;br /&gt;
&lt;br /&gt;
Commit often.&lt;br /&gt;
&lt;br /&gt;
== Step 2 - Push ==&lt;br /&gt;
This step will submit your code to the GitHub server(s).&lt;br /&gt;
&lt;br /&gt;
We do this from the command line @todo?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git push origin first-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will push your changes to &#039;&#039;&#039;&amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;&#039;&#039;&#039; (your (jlovers) repository on GitHub) and create a new branch named &#039;&#039;&#039;&amp;lt;code&amp;gt;first-test&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Done. Your changes are on the internet. Let&#039;s check out the GitHub site&lt;br /&gt;
&lt;br /&gt;
[[File:git-pull-feed-1.png]]&lt;br /&gt;
&lt;br /&gt;
Looks good.&lt;br /&gt;
&lt;br /&gt;
A nice feature in eclipse is the history view&lt;br /&gt;
&lt;br /&gt;
[[File:git-eclipse-history-view.png]]&lt;br /&gt;
&lt;br /&gt;
== The Pull Request ==&lt;br /&gt;
At this point we are finally ready to do our pull request. Let&#039;s go to our repository, be sure that you are on the correct branch (you may change this later), and find the &#039;&#039;&#039;Pull Request&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
Push it softly, nothing will really happen yet ;)&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-1.png]]&lt;br /&gt;
&lt;br /&gt;
On the next screen you should enter a meaningful message to the developers.&lt;br /&gt;
&lt;br /&gt;
Pay attention to the text white on black that shows &#039;&#039;&#039;from&#039;&#039;&#039; and &#039;&#039;&#039;to&#039;&#039;&#039; which repository:branch you are going to send your pull request. By pushing the button &#039;&#039;&#039;Change Commits&#039;&#039;&#039; you may modify those values.&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-2.png]]&lt;br /&gt;
&lt;br /&gt;
Here you can preview the changes you are proposing.&lt;br /&gt;
&lt;br /&gt;
[[File:github-pull-request-3.png]]&lt;br /&gt;
&lt;br /&gt;
== Push the Button ==&lt;br /&gt;
Ok, we are ready to &#039;&#039;&#039;Push the Button&#039;&#039;&#039; [[File:Button_send_pull_request.png]]&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention and in advance for your contribution(s) to the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
== Play ==&lt;br /&gt;
The Joomla! CMS actually is also moving to GitHub. To get you up and running (yes You who are not familiar with this git and GitHub stuff yet), a &#039;&#039;playground branch&#039;&#039; has been created to...imagine: &#039;&#039;&#039;Play&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
https://github.com/joomla/joomla-cms/tree/playground&lt;br /&gt;
&lt;br /&gt;
So go on and &#039;&#039;&#039;play&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thanks for your attention.&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_Student_Outreach_Program_Project_Ideas&amp;diff=26690</id>
		<title>Joomla! Student Outreach Program Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_Student_Outreach_Program_Project_Ideas&amp;diff=26690"/>
		<updated>2010-04-14T08:58:32Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Version 1.5 to 1.6 migration script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Joomla! Student Outreach Program==&lt;br /&gt;
JSOP has been created to provide a structure to allow students to participate in and contribute to the Joomla! project. Students will work with experienced mentors on coding and other projects designed to improve the Joomla! CMS and the general Joomla! ecosystem. &lt;br /&gt;
&lt;br /&gt;
This program will include two separate ways that students can contribute to Joomla! in structured programs with experienced mentors. The first way will be working on larger projects as part of a team. The team will include one or more students and one or more mentors. &lt;br /&gt;
&lt;br /&gt;
===Large Team Projects===&lt;br /&gt;
&lt;br /&gt;
Here is a starting list for possible large team projects. The idea is that these will be larger projects that would be worked on by teams of students and mentors.&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating in one of these projects, please add your name under Interested Mentors or Interested Students. This is not final and does not commit you to anything. It will just help us figure out who is interested in what. You can add your name to more than one project if you like and then we can decide later which project you will work on.&lt;br /&gt;
&lt;br /&gt;
====Improved, automated API documentation presentation====&lt;br /&gt;
Figure out a way to read the PHP code documentation into a database and use it to allow access to accurate, up-to-date documentation of the Joomla! API in a way that is usable to developers.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Louis Landry. Chris Davenport&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Web-based translation of Joomla core language files and 3rd party components====&lt;br /&gt;
Currently the process of making translations for Joomla requires manual copying of files and subsequently using a text editor to manually translate. This is labour intensive, hard to keep up to date with the latest Joomla releases and does not promote collaborations. I am proposing to use an automated system to create and distribute translations for Joomla. The translations would be done using Narro a free GPL web-based translation software used by Mozilla. In addition an automation layer with a Joomla components needs to be developer to ensure the system does not need any manual updating and ensures that translations are community driven. Its an important project and will be lots of fun at the same time.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Marius van Rijnsoever&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039; Edvard Ananyan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Internationalisation of the Joomla! help screens for 1.6====&lt;br /&gt;
Improve the process for creating and deploying the help screens in the many languages for which Joomla! is translated.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Jean-Marie Simonet,Akarawuth Tamrareang&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Multimedia Galleries ==== &lt;br /&gt;
Develop an component able to create galleries with music, videos, applets, flash-games... it must support medias from different types (youtube, brightcove, .swf, .flv, .rmv, .mov....), be able to create playlists and more... give your ideas.&lt;br /&gt;
&lt;br /&gt;
This project can reuse code from denvideo (http://extensions.joomla.org/extensions/multimedia/video-players-a-gallery/4053) and jmultimedia (http://extensions.joomla.org/extensions/external-contents/multimedia-channels/video-channels/5659)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Marcelo Eden&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Version 1.5 to 1.6 migration script====&lt;br /&gt;
We need to allow 1.5 users to easily migrate their sites to version 1.6. Work on this has been started, but it is a big job. Also, this could include hooks to make it easier for third-party developers to build migration tools for their extensions.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Mark Dexter, Rob Clayburn&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Project Management Tools====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Develop a component with project collaboration features (like BaseCamp: http://basecamphq.com/).&lt;br /&gt;
* ProgressBar views based on completed task based on sprints, milestones, project...&lt;br /&gt;
* Different front-end views for Clients, Team, Managers...&lt;br /&gt;
* A module to show the active projects and is respective ProgressBars.&lt;br /&gt;
* Allow Comments and discussions on tasks&lt;br /&gt;
* Allow manager/team to set the function points value of each task (eq: planing poker)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills needed:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP, MySQL, Javascript, MooTools&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Marcelo Eden, Mike Carson&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Joomla Dev Tools  ====&lt;br /&gt;
This is a project which automatically generate codes for you to help when developing Extensions. This will help, &lt;br /&gt;
* New comers to decrease the learning curve of Joomla! Development&lt;br /&gt;
* Professionals to automate their Joomla! tasks&lt;br /&gt;
&lt;br /&gt;
more details: http://docs.google.com/View?id=dhdpnvnz_59g6n3rsc8 &lt;br /&gt;
&lt;br /&gt;
samples     : http://code.google.com/p/arunoda/source/browse/#svn/trunk/kadira%3Fstate%3Dclosed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Oleg Nesterov&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039; Arunoda Susiripala&lt;br /&gt;
&lt;br /&gt;
===Small Task Projects===&lt;br /&gt;
&lt;br /&gt;
These projects will be broken down into segments that can be completed within 30 days. &lt;br /&gt;
&lt;br /&gt;
====Zen Joomla! template switcher====&lt;br /&gt;
This would be capable of efficiently allowing selection from a few hundred templates. Also maybe a component for submission and processing?&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Toni Marie, Flavia Tarzwell&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Usability testing====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Elin Waring&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System Testing==== &lt;br /&gt;
Create automated system tests to allow testing of the CMS from a user perspective.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Mark Dexter&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, HTML&lt;br /&gt;
:&#039;&#039;&#039;Interested Students:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Improve Unit Test Coverage====&lt;br /&gt;
Work has been started on this with the goal of a continuous build model, but test coverage is incomplete. We need to add many more unit tests. Proposals should specify an area of concentration. Several projects for different areas would be welcome.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Interested Mentors:&#039;&#039;&#039; Alessandro Nadalin, Mark Dexter&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Ian MacLennon&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, PHPUnit, Joomla! Framework&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
===Program Structure===&lt;br /&gt;
&lt;br /&gt;
In both cases, students would be working on a volunteer basis.&lt;br /&gt;
However, we will figure out some fun rewards, like awarding t-shirts or other Joomla! stuff. Also, we will issue official certificates to students who successfully contribute to either program.&lt;br /&gt;
&lt;br /&gt;
As with GSoC, the primary benefits to students are (a) real-world experience; (b) working with world-class mentors; and (c) the satisfaction of contributing to a great project and being part of a&lt;br /&gt;
great community.&lt;br /&gt;
&lt;br /&gt;
====Application Process====&lt;br /&gt;
Since JSOP is a volunteer program, we do not have a fixed limit on the number of students who can participate. However, we need to make sure we have mentors for each project or task. Also, we still want students to formally apply to the program so that we have information about each student and can make sure they are assigned to projects. We will have more information about the details of the application process shortly.&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=22242</id>
		<title>Summer of Code 2010 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=22242"/>
		<updated>2010-03-16T01:03:57Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Social layer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Welcome!===&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2010 project ideas page. As we move forward with the 2010 version of the Joomla! GSoC, we will use this page to develop possible project ideas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. Thanks!&lt;br /&gt;
&lt;br /&gt;
===Ideas===&lt;br /&gt;
&lt;br /&gt;
====Project Management Tools====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Develop a component with project collaboration features (like BaseCamp: http://basecamphq.com/).&lt;br /&gt;
* ProgressBar views based on completed task based on sprints, milestones, project...&lt;br /&gt;
* Different front-end views for Clients, Team, Managers...&lt;br /&gt;
* A module to show the active projects and is respective ProgressBars.&lt;br /&gt;
* Allow Comments and discussions on tasks&lt;br /&gt;
* Allow manager/team to set the function points value of each task (eq: planing poker)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Marcelo Eden&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP, MySQL, Javascript, MooTools&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Improve Image Presentation Capabilities====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Expand the JHtml modal behaviour to support groups of images (eg Litebox or similar).&lt;br /&gt;
* A content plugin to support modal gallery displays or inline image sliders.&lt;br /&gt;
* A module to support galleries of images.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
====Audio/Video Support====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Sourcing or creating a FOSS flash audio (see http://flash-mp3-player.net/) and video player.&lt;br /&gt;
* A content plugin to support embedding different types of audio files easily in content.&lt;br /&gt;
* A content plugin to support embedding different types of video files (both local and hosted, eg vimeo) easily in content.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Marcelo Eden&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, Flash&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
====Google Map Support====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* An editor-xtd plugin that allows you to insert &amp;quot;map code&amp;quot; for a content plugin.&lt;br /&gt;
* A content plugin to display a map with content.&lt;br /&gt;
* A module to display a map.&lt;br /&gt;
* Support for finding directions.&lt;br /&gt;
* Map based on address data in individual contacts&lt;br /&gt;
* Map all addresses in a category of contacts&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Marcelo Eden, Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, Javascript&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
====Simple User Subscription and User Utilities====&lt;br /&gt;
&lt;br /&gt;
This project would be suite of extensions that would provide enhanced user features such as:&lt;br /&gt;
&lt;br /&gt;
* Allow you to manage user account expiry.&lt;br /&gt;
* Allow you to manage password expiry.&lt;br /&gt;
* Allow for configurable email messages.&lt;br /&gt;
* Allow for user registration approval.&lt;br /&gt;
* Clean up bad user records.&lt;br /&gt;
* Run simple reports on user registration data.&lt;br /&gt;
* Bulk import of users and user information.&lt;br /&gt;
* Bulk export of users and user information.&lt;br /&gt;
* Allow user to self delete.&lt;br /&gt;
* Terms of service plugin.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Garthee, Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
====Extension Builder====&lt;br /&gt;
&lt;br /&gt;
This project would involve a component that builds other components, modules, plugins, languages and templates in skeletal form. It could also be used to create/edit new component and module layout overrides in templates.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Marcelo Eden, Oleg Nesterov, Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
====Joomla! API Reference====&lt;br /&gt;
&lt;br /&gt;
Currently the Joomla! API reference at [http://api.joomla.org] is not as useful as it could be. Develop a way to present the information in a useful (and search able) format and with the ability to have user contributed notes in a way similar to [http://www.php.net/manual/en/]. &lt;br /&gt;
&lt;br /&gt;
Currently api.joomla.org is static html produced by phpdocumenter. The project could achieve these goals by developing an extension or framework application to integrate the output from phpdocumenter with Joomla and incorporating a commenting style system.&lt;br /&gt;
&lt;br /&gt;
Note: There are also materials here in  docuwiki format [http://joomlacode.org/gf/project/joomla/scmsvn/?action=browse&amp;amp;path=%2Fdocumentation%2Ftrunk%2Fwiki%2Freferences%2Fjoomla.framework%2F] that could be incorporated. Other material is here [http://docs.joomla.org/Framework].&lt;br /&gt;
&lt;br /&gt;
Note: If you are interested in working on the API Reference then please talk to the Documentation Team before starting as we are currently working on a very different approach from the one described here.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, MVC, MySQL, Joomla! CMS Framework&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Improve Unit Test Coverage====&lt;br /&gt;
Work has been started on this with the goal of a continuous build model, but test coverage is incomplete. We need to add many more unit tests. Proposals should specify an area of concentration. Several projects for different areas would be welcome.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Ian MacLennon&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, PHPUnit, Joomla! Framework&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Improve System (Functional) Test Coverage====&lt;br /&gt;
Work has been started on this with the goal of a continuous build model, but test coverage is incomplete. We need to add many more system tests. Proposals should specify an area of concentration. Several projects for different areas would be welcome.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Selenium, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====MooTools====&lt;br /&gt;
Build a content editor with Moo Tools.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS, MooTools&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Enhanced Template Manager====&lt;br /&gt;
&lt;br /&gt;
Jooomla! 1.6 improves the template manager substantially.  Continue this by creating the ability to manage overrides form the template interface, develop an easier interface for beginners to modify css, and similar improvements in usability. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Social layer====&lt;br /&gt;
&lt;br /&gt;
Joomla Social API. Not necessarily a component like Community Builder but an API to allow other components to build on top of. &lt;br /&gt;
Consider API for&lt;br /&gt;
* activitysteams: http://activitystrea.ms/&lt;br /&gt;
* Open social http://code.google.com/apis/opensocial/ Some initial work already started on a previous gsoc project and I (rob clayburn) have some additional code available to be worked on.&lt;br /&gt;
* XFN http://gmpg.org/xfn/&lt;br /&gt;
* FOAF&lt;br /&gt;
* Facebook&lt;br /&gt;
* Twitter&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Rob Clayburn, Gary Brooks&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Advanced Voting====&lt;br /&gt;
Implement an advanced voting system that allows voting on several named dimensions of an item. Should work across all components, possibly as an improvement to the core voting or possibly as a separate extension.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Garthee&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Threaded Commenting and Comment Rating====&lt;br /&gt;
&lt;br /&gt;
Improve the core comment component so that it supports (a) threaded commenting and (b) comment rating (comments can be voted on or give thumbs up thumbs down and commenters can be rated based on comment votes). Troll rating system to allow auto un-publication of comments passing a set criterion of reporting. See Scoop&#039;s system as an example of the concept.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Community Moderation====&lt;br /&gt;
&lt;br /&gt;
Improve the core comment component so that it supports community moderation of articles and comments in a manner similar to Scoop &lt;br /&gt;
[http://en.wikipedia.org/wiki/Scoop_%28software%29]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Module Manager Improvements====&lt;br /&gt;
&lt;br /&gt;
Improve the User Interface and ease of use for the module manager.  &lt;br /&gt;
Examples:&lt;br /&gt;
*Make it easier to select groups of pages to assign modules to.&lt;br /&gt;
*Assign modules to all items in a submenu.&lt;br /&gt;
*Provide ability to assign/override module chrome on a per-module basis through the manager&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Brian Shaughnessy&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Moo Tools Depender ====&lt;br /&gt;
&lt;br /&gt;
Implement Moo Tools depender within Joomla.&lt;br /&gt;
&lt;br /&gt;
Depender is the official library builder for MooTools libraries.&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
*[http://mootools.net/blog/2009/11/09/mootools-depender-a-build-tool-for-mootools-javascript-libraries/     Blog]&lt;br /&gt;
&lt;br /&gt;
*[http://mootools.net/docs/more/Core/Depender  Some details about the client side app]&lt;br /&gt;
*[http://github.com/anutron/mootools-depender/ Server side app]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Easy&lt;br /&gt;
&lt;br /&gt;
====Joomla Translations====&lt;br /&gt;
Create a centralized translation tool, which will be a kind of Facebook Self-Translation App for Joomla! communities to have better translation.&lt;br /&gt;
&lt;br /&gt;
The centralized website will make better translations for Joomla! It will help non-English speaking translation teams to get feedback about translation quality from people, who speak the same language. So translation teams can involve more volunteers in translation process. It will help also extension developers to translate their software. It will enable ability to submit a new extension translation INI file in English and get the translated version from the translation teams.&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
*[http://www.facebook.com/translations/ Facebook Self-Translation]&lt;br /&gt;
*[http://localize.drupal.org]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====JMail====&lt;br /&gt;
&lt;br /&gt;
Create a Joomla! library to replace the phpmailer library. This should build on existing work in the xxx branch. &lt;br /&gt;
This would include POP and SMTP clients and data translation.&lt;br /&gt;
The goal should be to process both read and write. &lt;br /&gt;
Complete unit testing is a must for this.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====JFeed====&lt;br /&gt;
&lt;br /&gt;
Create a Joomla! library to replace the simplepie library. This should build on existing work in the xxx branch. This should plan for the future such as incorporating advanced atom specs and the ability to embed podcasts. &lt;br /&gt;
 &lt;br /&gt;
Complete unit testing is a must for this.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====JXMLRPC====&lt;br /&gt;
&lt;br /&gt;
Complete the Joomla! library for XMLRPC. This should build on existing work in the xxx branch. &lt;br /&gt;
 &lt;br /&gt;
Complete unit testing is a must for this.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Gary Brooks&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====JCalendar====&lt;br /&gt;
&lt;br /&gt;
Create a JCalendar class. This should write iCal and hCal.   &lt;br /&gt;
 &lt;br /&gt;
Complete unit testing is a must for this.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====JCard====&lt;br /&gt;
&lt;br /&gt;
Create a JCard class. This should write vCard and hCard.    &lt;br /&gt;
 &lt;br /&gt;
Complete unit testing is a must for this.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Cache Improvements and Tests====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====JImage====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Consultant:&#039;&#039;&#039; Louis Landry&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Joomla! API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Google Wave/Apps API Integration====&lt;br /&gt;
&lt;br /&gt;
Integrate the functionality of Google Wave into the Publishing Workflow and/or Site Management processes.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Matt Lipscomb, Sandra Warren&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, MySQL, Joomla! API, Google Wave/Apps API&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Improved Search====&lt;br /&gt;
&lt;br /&gt;
Currently Joomla! does not support term weights. This provides a disadvantage to many sites that rely on search. Users will not find the things that they need and you will loose those users.&lt;br /&gt;
&lt;br /&gt;
This project would include the following:&lt;br /&gt;
* Providing a more advance search API. &lt;br /&gt;
* Create a weight  structure for the search API (example: http://phpir.com/alternative-term-weighting)&lt;br /&gt;
* Provide a clean AJAX Advance Search&lt;br /&gt;
* Improve the plugin support for old and new plugins&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Steven Pignataro - &#039;corePHP&#039; (www.corephp.com)&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla! CMS Framework, MVC, PHP 5.2+, mySQL, AJAX (mootools)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Advanced&lt;br /&gt;
&lt;br /&gt;
====Page Versioning Extension====&lt;br /&gt;
&lt;br /&gt;
Build on work done in the past two years to add page versioning to Joomla!. &lt;br /&gt;
Create a 1.6 content versioning extension with the goal that this work could be integrated into the core Joomla CMS for future releases. The Page Versioning Extension will allow the ability for frontend and backend content users to be able to save and re-publish/revert previously saved versions of content items that they have access to.&lt;br /&gt;
&lt;br /&gt;
Further user permissions could be introduced in order to restrict access to this overall feature.&lt;br /&gt;
&lt;br /&gt;
Features could include a visual and html code difference between the current and previously saved versions, as well as general searching data such as dates and time of previous saved entries of that content.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Vic Drover&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla! Framework, MVC, PHP 5.2+, mySQL, AJAX (mootools)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Search Plugin Tool and Search Display Customization====&lt;br /&gt;
&lt;br /&gt;
As more and more usage of 3PD extensions occurs, those extensions have data that needs to be integrated into the search capabilities.  This idea is part tool, and part plugin. &lt;br /&gt;
Create an installable tool component that can analyze the database for relevant fields in the database that are added by 3PD components.  Display those fields to be selectable in the component and once selected, have the tool create a search plugin to augment either the integrated search or various 3PD search solutions.  Once the plugin is created have a second part of the component allow the search results display to be organized in various ways that are customizable.  This tool could be part of setting up a site, or could be run at any given time that something new is added to add new fields of data that may be created and needed to be part of search.&lt;br /&gt;
&lt;br /&gt;
Would be an interesting project mixed with Improved Search to include weighting.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla! Framework, MVC, PHP 5.2+, mySQL, AJAX (mootools)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Blank Slate Extensions====&lt;br /&gt;
&lt;br /&gt;
The basic idea is to develop a set of example extensions that have less than useful functionality, but show developers some of the core features of using the Joomla Framework.&lt;br /&gt;
&lt;br /&gt;
* Design a sample component that manages a set of records in the database&lt;br /&gt;
* Design a sample module that relies on the component and integrates with some of the behaviors&lt;br /&gt;
* Design a sample plugin or two that demonstrate the ways plugins can interact with the rendering process&lt;br /&gt;
* Utilize pure MVC methodology&lt;br /&gt;
* Concept is to focus on developing a project that can be easily repurposed&lt;br /&gt;
&lt;br /&gt;
Project would best suit a programmer with an extreme desire to dig deep into the API. These blank slate extensions could be available for download to developers, for study or for building upon.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Oleg Nesterov&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP, MySQL, Javascript, MooTools&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Rewrite the internal research with Zend_Lucene====&lt;br /&gt;
&lt;br /&gt;
No many words to say, it would be great if some student would like to&lt;br /&gt;
do this amazing job: full-text MySQL make the environment spend lots&lt;br /&gt;
of resources, quering a lucene index wouldn&#039;t.&lt;br /&gt;
&lt;br /&gt;
The idea is to bring the Zend_Lucene engine, put it on Joomla! and&lt;br /&gt;
start rewriting an internal research from scratch. &lt;br /&gt;
&lt;br /&gt;
Things you&#039;ll need to focus are:&lt;br /&gt;
* an agile strategy to develop this new search engine&lt;br /&gt;
* localize entities suitable for the search engine ( articles, contacts, ... )&lt;br /&gt;
* add event/triggers for the CRUD of those entities&lt;br /&gt;
* index generation/optimization&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Alessandro Nadalin&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP, MySQL, Zend Framework, Lucene&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium - Hard&lt;br /&gt;
&lt;br /&gt;
====Improve Joomla user integration with CiviCRM contact records====&lt;br /&gt;
&lt;br /&gt;
CiviCRM is a contact relationship management extension for Joomla (www.civicrm.org). There are some existing limitations/weaknesses with how Joomla users and CiviCRM contacts connect and interact. The following improvements could be considered:&lt;br /&gt;
&lt;br /&gt;
* delete J user when related C contact is deleted&lt;br /&gt;
* allow creation of J user directly from C contact (add button to create user)&lt;br /&gt;
* improve editing of J user from within C contact (account popup in modal box)&lt;br /&gt;
* ensure email is updated in both C and J if altered from either side&lt;br /&gt;
* include J user handling in the C contact deduplication/merge process&lt;br /&gt;
* allow automatic redirection of J user registration pages to CiviCRM profile from within the Civi interface (global settings, via a system plugin)&lt;br /&gt;
* begin integrating C ACL functions with J 1.6 ACL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Brian Shaughnessy&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, CiviCRM, PHP, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=21841</id>
		<title>Summer of Code 2010 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=21841"/>
		<updated>2010-02-22T08:31:09Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: /* Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Welcome!===&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2010 project ideas page. As we move forward with the 2010 version of the Joomla! GSoC, we will use this page to develop possible project ideas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. Thanks!&lt;br /&gt;
&lt;br /&gt;
===Ideas===&lt;br /&gt;
&lt;br /&gt;
=====Improve Image Presentation Capabilities=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Expand the JHtml modal behaviour to support groups of images (eg Litebox or similar).&lt;br /&gt;
* A content plugin to support modal gallery displays or inline image sliders.&lt;br /&gt;
* A module to support galleries of images.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
=====Audio/Video Support=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Sourcing or creating a FOSS flash audio (see http://flash-mp3-player.net/) and video player.&lt;br /&gt;
* A content plugin to support embedding different types of audio files easily in content.&lt;br /&gt;
* A content plugin to support embedding different types of video files (both local and hosted, eg vimeo) easily in content.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, Flash&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
=====Google Map Support=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* An editor-xtd plugin that allows you to insert &amp;quot;map code&amp;quot; for a content plugin.&lt;br /&gt;
* A content plugin to display a map with content.&lt;br /&gt;
* A module to display a map.&lt;br /&gt;
* Support for finding directions.&lt;br /&gt;
* Map based on address data in individual contacts&lt;br /&gt;
* Map all addresses in a category of contacts&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, Javascript&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
=====Simple User Subscription and User Utilities=====&lt;br /&gt;
&lt;br /&gt;
This project would be suite of extensions that would provide enhanced user features such as:&lt;br /&gt;
&lt;br /&gt;
* Allow you to manage user account expiry.&lt;br /&gt;
* Allow you to manage password expiry.&lt;br /&gt;
* Allow for configurable email messages.&lt;br /&gt;
* Allow for user registration approval.&lt;br /&gt;
* Clean up bad user records.&lt;br /&gt;
* Run simple reports on user registration data.&lt;br /&gt;
* Bulk import of users&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
=====Extension Builder=====&lt;br /&gt;
&lt;br /&gt;
This project would involve a component that builds other components, modules, plugins, languages and templates in skeletal form. It could also be used to create/edit new component and module layout overrides in templates.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Unassigned&lt;br /&gt;
:&#039;&#039;&#039;Skills:&#039;&#039;&#039; Joomla CMS framework, MVC, PHP 5.2, MySQL&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; medium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Joomla! API Reference====&lt;br /&gt;
&lt;br /&gt;
Currently the Joomla! API reference at [http://api.joomla.org] is not as useful as it could be. Develop a way to present the information in a useful (and search able) format and with the ability to have user contributed notes in a way similar to [http://www.php.net/manual/en/]. &lt;br /&gt;
&lt;br /&gt;
Currently api.joomla.org is static html produced by phpdocumenter. The project could achieve these goals by developing an extension or framework application to integrate the output from phpdocumenter with Joomla and incorporating a commenting style system.&lt;br /&gt;
&lt;br /&gt;
Note: There are also materials here in  docuwiki format [http://joomlacode.org/gf/project/joomla/scmsvn/?action=browse&amp;amp;path=%2Fdocumentation%2Ftrunk%2Fwiki%2Freferences%2Fjoomla.framework%2F] that could be incorporated. Other material is here [http://docs.joomla.org/Framework].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, MVC, MySQL, Joomla! CMS Framework&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;br /&gt;
&lt;br /&gt;
====Improve Unit Test Coverage====&lt;br /&gt;
Work has been started on this with the goal of a continuous build model, but test coverage is incomplete. We need to add many more unit tests. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, PHPUnit, Joomla! Framework&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Improve System (Functional) Test Coverage====&lt;br /&gt;
Work has been started on this with the goal of a continuous build model, but test coverage is incomplete. We need to add many more system tests. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Selenium, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====MooTools====&lt;br /&gt;
Build some things with Moo Tools that people can get for free from the Joomla! sites.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS, MooTools&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Enhanced Template Manager====&lt;br /&gt;
&lt;br /&gt;
Jooomla! 1.6 improves the template manager substantially.  Continue this by creating the ability to manage overrides form the template interface, develop an easier interface for beginners to modify css, and similar improvements in usability. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Social layer====&lt;br /&gt;
&lt;br /&gt;
Joomla Social API. Not necessarily a component like Community Builder but an API to allow other components to build on top of. &lt;br /&gt;
Consider API for&lt;br /&gt;
* activitysteams: http://activitystrea.ms/&lt;br /&gt;
* Open social http://code.google.com/apis/opensocial/ Some initial work already started on a previous gsoc project and I (rob clayburn) have some additional code available to be worked on.&lt;br /&gt;
* XFN http://gmpg.org/xfn/&lt;br /&gt;
* FOAF&lt;br /&gt;
* Facebook&lt;br /&gt;
* Twitter&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Skills Needed:&#039;&#039;&#039; PHP, Javascript, Joomla! CMS&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_stylesheets_for_other_output_devices&amp;diff=12589</id>
		<title>Adding stylesheets for other output devices</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_stylesheets_for_other_output_devices&amp;diff=12589"/>
		<updated>2009-01-11T18:07:43Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{cookiejar}}&lt;br /&gt;
You can define different CSS style sheets depending upon the device the user is browsing your site with&lt;br /&gt;
&lt;br /&gt;
The recognised media types are:&lt;br /&gt;
&lt;br /&gt;
*all - Suitable for all devices. &lt;br /&gt;
*aural - For speech synthesizers. &lt;br /&gt;
*braille - Intended for braille tactile feedback devices. &lt;br /&gt;
*embossed -Intended for paged braille printers. &lt;br /&gt;
*handheld - Intended for handheld devices. &lt;br /&gt;
*print - Used for formatting printed pages. &lt;br /&gt;
*projection - Intended for projected presentations, for example projectors or print to transparencies.&lt;br /&gt;
*screen - Intended primarily for color computer screens. &lt;br /&gt;
*tty - Intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities. Authors should not use pixel units with the &amp;quot;tty&amp;quot; media type. &lt;br /&gt;
*tv - Intended for television-type devices (low resolution, color, limited-scrollability screens, sound available). &lt;br /&gt;
&lt;br /&gt;
You can assign a media type to a CSS declaration with the following syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
@media print {&lt;br /&gt;
    BODY { font-size: 12pt }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To assign the declaration to more than one media type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@media print handheld{&lt;br /&gt;
    BODY { font-size: 12pt }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, and perhaps a neater solution is to create a separate style sheet for a given media type and include the following in your templates &amp;lt;head&amp;gt; (the following is taken from the beez template):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code html&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;&amp;lt;?php echo $this-&amp;gt;baseurl ?&amp;gt;/templates/beez/css/print.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;Print&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_JavaScript&amp;diff=12587</id>
		<title>Adding JavaScript</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_JavaScript&amp;diff=12587"/>
		<updated>2009-01-11T17:53:47Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{cookiejar}}&lt;br /&gt;
===Adding JavaScript===&lt;br /&gt;
----&lt;br /&gt;
This chunk should describe in detail how to add JavaScript to the head of&lt;br /&gt;
a template using the Joomla! 1.5 API calls. It should be aimed at&lt;br /&gt;
people who have only minimal knowledge of PHP, HTML and JavaScript.&lt;br /&gt;
----&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the following code to have the javascript library /media/system/js/sample.js included in your template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $document = &amp;amp;JFactory::getDocument();&lt;br /&gt;
 $document-&amp;gt;addScript( &#039;/media/system/js/sample.js&#039; );&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Explanation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ultimately you are trying to have the resulting HTML page have in the &amp;lt;head&amp;gt; ... &amp;lt;/head&amp;gt; area have a javascript include:&lt;br /&gt;
&lt;br /&gt;
For Example:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/media/system/js/sample.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the javascript you want to include is in the directory,  from the above example:&lt;br /&gt;
 /media/system/js/sample.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are able to load both your page and see the &amp;lt;script&amp;gt; tag in the &amp;lt;head&amp;gt; area, and be able to load the javascript from the address&lt;br /&gt;
&lt;br /&gt;
Again, using the example: &lt;br /&gt;
   &amp;lt;nowiki&amp;gt;http://www.example.com/media/system/js/sample.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the script is integrated into your page, and you can proceed to using javascript in your HTML.&lt;br /&gt;
&lt;br /&gt;
Do not directly add the &amp;lt;script&amp;gt; to your template&#039;s index.php.&lt;br /&gt;
&lt;br /&gt;
The code will insert the the &amp;lt;script&amp;gt; line where your index.php has the following line:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;jdoc:include type=&amp;quot;head&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add this PHP code to your page, in the head, or next to the javascript code you will use, depending on your preference.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $document = &amp;amp;JFactory::getDocument();&lt;br /&gt;
 $document-&amp;gt;addScript( &#039;/media/system/js/sample.js&#039; );&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Reload your template and view the page, and ensure that the sample.js is included in the &amp;lt;head&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Unit_Testing_--_a_Simple_Example&amp;diff=7396</id>
		<title>Talk:Unit Testing -- a Simple Example</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Unit_Testing_--_a_Simple_Example&amp;diff=7396"/>
		<updated>2008-05-29T14:06:03Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;im just starting to look at this but the code given in this page didn&#039;t work for me. Instead I had to wrap the setup and test functions inside a class, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
&lt;br /&gt;
if (! defined(&#039;JUNIT_MAIN_METHOD&#039;)) {&lt;br /&gt;
	define(&#039;JUNIT_MAIN_METHOD&#039;, &#039;JRequestTest_GetMethod::main&#039;);&lt;br /&gt;
	$JUnit_home = DIRECTORY_SEPARATOR . &#039;unittest&#039; . DIRECTORY_SEPARATOR;&lt;br /&gt;
	if (($JUnit_posn = strpos(__FILE__, $JUnit_home)) === false) {&lt;br /&gt;
		die(&#039;Unable to find &#039; . $JUnit_home . &#039; in path.&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	$JUnit_posn += strlen($JUnit_home) - 1;&lt;br /&gt;
	$JUnit_root = substr(__FILE__, 0, $JUnit_posn);&lt;br /&gt;
	$JUnit_start = substr(&lt;br /&gt;
		__FILE__,&lt;br /&gt;
		$JUnit_posn + 1,&lt;br /&gt;
		strlen(__FILE__) - strlen(basename(__FILE__)) - $JUnit_posn - 2&lt;br /&gt;
	);&lt;br /&gt;
	require_once $JUnit_root . DIRECTORY_SEPARATOR . &#039;setup.php&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Now load the Joomla environment&lt;br /&gt;
 */&lt;br /&gt;
if (! defined(&#039;_JEXEC&#039;)) {&lt;br /&gt;
	define(&#039;_JEXEC&#039;, 1);&lt;br /&gt;
}&lt;br /&gt;
require_once JPATH_BASE . &#039;/includes/defines.php&#039;;&lt;br /&gt;
/*&lt;br /&gt;
 * Mock classes&lt;br /&gt;
 */&lt;br /&gt;
// (no mocks for this test)&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * We now return to our regularly scheduled environment.&lt;br /&gt;
 */&lt;br /&gt;
require_once JPATH_LIBRARIES . &#039;/joomla/import.php&#039;;&lt;br /&gt;
 &lt;br /&gt;
jimport( &#039;joomla.environment.request&#039; );&lt;br /&gt;
&lt;br /&gt;
class addElementTest_Mode1 extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Clear the cache&lt;br /&gt;
	 */&lt;br /&gt;
	function setUp() {&lt;br /&gt;
		// Make sure the request hash is clean.&lt;br /&gt;
		$GLOBALS[&#039;_JREQUEST&#039;] = array();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function testGetMethod()&lt;br /&gt;
	{&lt;br /&gt;
	&lt;br /&gt;
		$this-&amp;gt;assertEquals(&#039;1&#039;, &#039;1&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Call main() if this source file is executed directly.&lt;br /&gt;
if (JUNIT_MAIN_METHOD == &#039;JRequestTest_GetMethod::main&#039;) {&lt;br /&gt;
	JRequestTest_GetMethod::main();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Pollen8|Pollen8]] 10:06, 29 May 2008 (EDT) pollen8&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Unit_Testing_--_a_Simple_Example&amp;diff=7395</id>
		<title>Talk:Unit Testing -- a Simple Example</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Unit_Testing_--_a_Simple_Example&amp;diff=7395"/>
		<updated>2008-05-29T13:58:33Z</updated>

		<summary type="html">&lt;p&gt;Pollen8: New page: im just starting to look at this but the code given in this page didn&amp;#039;t work for me. Instead I had to wrap the setup and test functions inside a class, e.g.  [code] &amp;lt;?php   if (! defined(&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;im just starting to look at this but the code given in this page didn&#039;t work for me. Instead I had to wrap the setup and test functions inside a class, e.g.&lt;br /&gt;
&lt;br /&gt;
[code]&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
&lt;br /&gt;
if (! defined(&#039;JUNIT_MAIN_METHOD&#039;)) {&lt;br /&gt;
	define(&#039;JUNIT_MAIN_METHOD&#039;, &#039;JRequestTest_GetMethod::main&#039;);&lt;br /&gt;
	$JUnit_home = DIRECTORY_SEPARATOR . &#039;unittest&#039; . DIRECTORY_SEPARATOR;&lt;br /&gt;
	if (($JUnit_posn = strpos(__FILE__, $JUnit_home)) === false) {&lt;br /&gt;
		die(&#039;Unable to find &#039; . $JUnit_home . &#039; in path.&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	$JUnit_posn += strlen($JUnit_home) - 1;&lt;br /&gt;
	$JUnit_root = substr(__FILE__, 0, $JUnit_posn);&lt;br /&gt;
	$JUnit_start = substr(&lt;br /&gt;
		__FILE__,&lt;br /&gt;
		$JUnit_posn + 1,&lt;br /&gt;
		strlen(__FILE__) - strlen(basename(__FILE__)) - $JUnit_posn - 2&lt;br /&gt;
	);&lt;br /&gt;
	require_once $JUnit_root . DIRECTORY_SEPARATOR . &#039;setup.php&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Now load the Joomla environment&lt;br /&gt;
 */&lt;br /&gt;
if (! defined(&#039;_JEXEC&#039;)) {&lt;br /&gt;
	define(&#039;_JEXEC&#039;, 1);&lt;br /&gt;
}&lt;br /&gt;
require_once JPATH_BASE . &#039;/includes/defines.php&#039;;&lt;br /&gt;
/*&lt;br /&gt;
 * Mock classes&lt;br /&gt;
 */&lt;br /&gt;
// (no mocks for this test)&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * We now return to our regularly scheduled environment.&lt;br /&gt;
 */&lt;br /&gt;
require_once JPATH_LIBRARIES . &#039;/joomla/import.php&#039;;&lt;br /&gt;
 &lt;br /&gt;
jimport( &#039;joomla.environment.request&#039; );&lt;br /&gt;
&lt;br /&gt;
class addElementTest_Mode1 extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Clear the cache&lt;br /&gt;
	 */&lt;br /&gt;
	function setUp() {&lt;br /&gt;
		// Make sure the request hash is clean.&lt;br /&gt;
		$GLOBALS[&#039;_JREQUEST&#039;] = array();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function testGetMethod()&lt;br /&gt;
	{&lt;br /&gt;
	&lt;br /&gt;
		$this-&amp;gt;assertEquals(&#039;1&#039;, &#039;1&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Call main() if this source file is executed directly.&lt;br /&gt;
if (JUNIT_MAIN_METHOD == &#039;JRequestTest_GetMethod::main&#039;) {&lt;br /&gt;
	JRequestTest_GetMethod::main();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
[/code]&lt;/div&gt;</summary>
		<author><name>Pollen8</name></author>
	</entry>
</feed>