I've installed Joomla v3.4.7 to test and prepare my project.I created a component 'HelloWorld' step by step according the official tutorial [https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Using_the_database][1] ,and I succeeded to show the data list,and then the editing page to add or edit existing data, from the Administrator part, just like
localhost/joomla-test/administrator/index.php?option=com_helloworld
After finishing these, I simply copied the files in /Administrator/components/com_helloworld
to /components/com_helloworld
and overwrite previous files, and access the site component:
localhost/joomla-test/index.php?option=com_helloworld
It didn't work! I used firebug to debug and I got a
NetworkError: 500 Internal Server Error - http://localhost/joomla-test/index.php?option=com_helloworld
error.... What's happened?
My code:
Site/helloworld.php:
<?php
// import joomla controller library
jimport('joomla.application.component.controller');
// Get an instance of the controller prefixed by HelloWorld
$controller = JControllerLegacy::getInstance('HelloWorld');
// Perform the Request task
$controller->execute(JFactory::getApplication()->input->getCmd('task'));
// Redirect if set by the controller
$controller->redirect();
site/controller.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
// import Joomla controller library
jimport('joomla.application.component.controller');
/**
* General Controller of HelloWorld component
*/
class HelloWorldController extends JControllerLegacy
{
/**
* display task
*
* @return void
*/
protected $default_view = 'helloworlds';
public function display($cachable = false)
{
parent::display($cachable);
echo "controller";
return $this;
}
}
site/views/helloworlds/view.html.php:
<?php
// No direct access to this file
defined('_JEXEC') or die;
// import Joomla view library
jimport('joomla.application.component.view');
/**
* HelloWorlds View
*/
class HelloWorldViewHelloWorlds extends JViewLegacy
{
/**
* HelloWorlds view display method
* @return void
*/
function display($tpl = null)
{
// Get data from the model
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
// Set the toolbar
$this->addToolBar();
// Display the template
parent::display($tpl);
}
/**
* Setting the toolbar
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'));
JToolBarHelper::deleteList('', 'helloworlds.delete');
JToolBarHelper::editList('helloworld.edit');
JToolBarHelper::addNew('helloworld.add');
}
}
Please help, thank you all.
It doesn't work this way (by just copying the folder over). You will have to install the component by packaging it and then installing it on the server. You will need to install the zipped component (that has the XML manifest file) on the server.
Try the following: download the basic HelloWorld component from Joomla, and then install it on your website, and then overwrite it with the files from your localhost.
Site and Administrator have slight differences; the most relevant are related to the template, since in Admin you can count on a standard layout; this is why in an administrator view.html you setup the toolbar and the sidemenu; on the frontend, you create menus pointing to views with configuration.
Your best bet is to create fresh files for controller and view, and then you can create your models inheriting from the administrator modules, that is the best for avoiding code duplication, and it will still leave you the maximum flexibility for customizing the views.
Toolbar cannot work in the front end. It's weird, yes, but if you look it is a separate thing in the administrator folder. It actually checks whether you are in admin as well. I once made a patch to removed the check but it turned out that it would have broken tons of components that had worked around this.
Second, there are many calls to things that rely on relative positioning or that might even explicitly require admin access. Third, there are indeed some things that are slightly different because in the back end you basically never render the normal view, only the list view and the edit view.
If you want to do admin functions in the front end the best general approach is to look at how com_config, Com_templates and com_modules do it.