Dans mon contrôleur principal, j'intègre avec succès un chemin personnalisé pour le modèle , mais il me manque quelque chose pour le chemin personnalisé vers le Voir .
Le chemin du composant est:
\components
\com_meetings
\models
\meetings
meetings.php (Joomla Default)
\custom
\meetings
meetings.php (My custom override that works)
\views
\meetings (Joomla Default)
\tmpl
view.html.php
\custom (My Custom views Folder)
\meetings (Customized View)
\tmpl (This folder is ignored)
view.html.php (This DOES load)
Donc, avec le code ci-dessous, Joomla charge correctement le modèle personnalisé mais uniquement partiellement charge la vue personnalisée. (Mon view.html.php
Est chargé, mais le dossier \tmpl
Correspondant est ignoré et il revient à la valeur par défaut \tmpl
.
com_meetings\controller.php: (Joomla 3.6.2)
defined('_JEXEC') or die;
jimport('joomla.application.component.controller');
class MeetingsController extends JControllerLegacy {
public function __construct($config = array()) {
$this->input = JFactory::getApplication()->input;
// Begin Custom Model and View Paths
$view_name = $this->input->getCmd('view', $this->default_view);
// Custom Model Path
$custom_model_path = JPATH_COMPONENT.'/models/custom/';
$custom_model = $custom_model_path.$view_name.'.php';
if(is_dir( $custom_model_path )){
if(file_exists( $custom_model )){
$config['model_path'] = $custom_model_path;
}
}
// Custom View Path
$custom_view_path = JPATH_COMPONENT.'/views/custom/';
if(is_dir( $custom_view_path )){
$custom_view_path .= $view_name;
if(is_dir( $custom_view_path )){
$custom_view = $custom_view_path.'/view.html.php';
if(file_exists( $custom_view )){
$config['view_path'] = JPATH_COMPONENT.'/views/custom';
}
}
}
// End Custom View Path
parent::__construct($config);
}
Les chemins ci-dessus SONT pris en compte dans la méthode __construct()
de libraries\fof\controller\controller.php
Autour des lignes 594 et 617 et charge mon view.html.php
, Mais comme mentionné le relatif \tmpl
dossier est ignoré.
Line 594 if (array_key_exists('model_path', $config))....
Line 617 if (array_key_exists('view_path', $config))
vues\custom\meetings\view.html.php
class MeetingsViewMeetings extends JViewLegacy {
public function display($tpl = null)
{
$app = JFactory::getApplication();
if (count($errors = $this->get('Errors'))) {
throw new Exception(implode("\n", $errors));
}
$this->_prepareDocument();
\\ The override gets this far;
parent::display($tpl);
}
Je ne peux pas suivre où cela est vérifié, et je ne peux pas voir ce que j'ai mal fait. Toutes les suggestions sont les bienvenues ~
P.S., je sais que je peux insérer des vues de remplacement dans le modèle, mais je souhaite implémenter le chemin personnalisé de Joomla au niveau du composant pour conserver les personnalisations, quel que soit le modèle actif.
ADDITONAL UPDATE En regardant la vue $, je vois qu'elle a résolu les chemins à vérifier. Donc, je suppose que la question est de savoir comment obtenir mon chemin personnalisé entre ces 2:
[_path:protected] => Array (
[template] => Array (
[0] => C:\www\commission\templates\protostar\html\com_meetings\meetings\
[1] => C:\www\commission\components\com_meetings\views\meetings\tmpl\
)
)
[_template:protected] => C:\www\commission\components\com_meetings\views\meetings\tmpl\default.php
Je pense que vous devez aussi trouver le chemin 'template_path' dans la configuration. Probablement quelque chose comme
$config['template_path'] = array(
JPATH_COMPONENT.'/views/tmpl',
$custom_view_path.'/tmpl',
/* maybe other override place here like the template */
);
Je ne pense pas qu'aucun des chemins générés automatiquement corresponde à la structure de votre fichier (lignes 2703 à 2725).
if (!array_key_exists('template_path', $config))
{
$config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::pluralize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . FOFInflector::pluralize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::singularize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . FOFInflector::singularize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . $config['view'] . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . $config['view'];
}
}