Après avoir suivi le document Joomla " Développement d'un composant MVC " jusqu'à l'étape 15 - "Ajout de la liste de contrôle d'accès", tout fonctionne. Ensuite, j'ai essayé d'ajouter une nouvelle vue "catégorie", mais cela n'a pas fonctionné.
Voici mon code:
Dans le dossier admin fields j'ai créé un hellocategory.php avec le même code que helloword, il suffit de changer
protected $type = 'HelloCategory';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*/
protected function getOptions()
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// custom
$query->select('#__categories.id as id,#__categories.title as category,#__categories.extension as exten');
$query->from('#__categories');
$query->where($db->quoteName('extension') . ' LIKE '. $db->quote('com_helloworld'));
// end custom
$db->setQuery((string) $query);
$messages = $db->loadObjectList();
$options = array();
if ($messages)
{
foreach ($messages as $message)
{
$options[] = JHtml::_('select.option', $message->category);
}
}
$options = array_merge(parent::getOptions(), $options);
return $options;
view.html.php
class HelloWorldViewCategory extends JViewLegacy
{
/**
* Display the Hello World view
*
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
*
* @return void
*/
function display($tpl = null)
{
// Assign data to the view
$category = $this->get('Item');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');
return false;
}
// Display the view
parent::display($tpl);
}
}
default.xml
<layout title="Category">
<message>category</message>
</layout>
<fields
name="request"
addfieldpath="/administrator/components/com_helloworld/models/fields"
>
<fieldset name="request">
<field
name="id"
type="hellocategory"
label="COM_UNOFD_UNOFD_FIELD_GREETING_LABEL"
description="COM_UNOFD_UNOFD_FIELD_GREETING_DESC"
/>
</fieldset>
</fields>
default.php
<?php var_dump($category); ?>
output is Null
Le menu Admin fonctionne, mais le client ne peut obtenir aucun élément dans les données de cette catégorie. Existe-t-il des informations sur le développement d'un document avec vue de catégorie unique ou d'un exemple en ligne? J'ai essayé Google pour solution quatre jours, mais toujours aucune idée, ou le seul moyen est d'obtenir des données de la base de données? Merci beaucoup!
var_dump ($ this) va sortir
object(HelloWorldViewCategory)#223 (15) { ["_name":protected]=> string(8) "category" ["_models":protected]=> array(0) { } ["_basePath":protected]=>
string(55) "/var/www/clients/client0/web11/web/components/com_helloworld" ["_defaultModel":protected]=> NULL ["_layout":protected]=> string(7) "default" ["_layoutExt":protected]=> string(3) "php" ["_layoutTemplate":protected]=> string(1) "_" ["_path":protected]=> array(2) { ["template"]=> array(2) { [0]=>
string(79) "/var/www/clients/client0/web11/web/templates/protostar/html/com_helloworld/category/" bla bla bla....
Edit: OK, maintenant nous avons le bas de votre méthode getOptions (), le problème est dans la méthode display () de votre vue. La catégorie $ est uniquement disponible dans la portée locale de cette méthode, vous devez en faire une propriété de classe.
Dans display () change:
$category = $this->get('Item');
à
$this->category = $this->get('Item');
Dans default.php:
var_dump($this->category);
Je vous suggère d'utiliser le lien vers index.php?option=com_categories&extension=com_YOUREXTENSION
.
Et ajouter /helpers/yourextension.php
fichier qui générera un menu en ayant la méthode
public static function addSubmenu($vName)
{
JHtmlSidebar::addEntry(
JText::_('COM_YOUREXTENTION_ENTRY_ONE'),
'index.php?option=com_yourextension',
$vName == 'entryone'
);
JHtmlSidebar::addEntry(
JText::_('COM_YOUREXTENTION_ENTRY_TWO'),
'index.php?option=com_categories&extension=com_yourextension',
$vName == 'entrytwo'
);
}