Comment s'y retrouver dans le développement sur Joomla! ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Comment s'y retrouver dans le développement sur Joomla! ?

    Bonjour, j'aimerais apprendre à développer sur Jooma!, j'ai de solide connaissances en PHP, MYSQL, JavaScript et je développe régulièrement avec un framework PHP. Généralement, je ne rencontre pas trop de soucis pour développer avec un CMS, du moins tant qu'il y a de la documentation. J'ai essayé Drupal et je suis arrivé facilement à me débrouiller, pour le reste c'est assez bien documenté.

    En revanche avec Joomla!, je suis complètement perdu ! Par exemple en souhaitant créer mon propre template, j'ai voulu personnaliser l'affichage d'un article avec le fichier default.php. Sauf que j'ai été choqué de voir autant de code pour afficher simplement un article. J'ai beau cherché sur Internet, rien est expliqué. J'ai pu trouver l'API de Joomla, mais je risque de perdre à temps fou à analyser tout le code.

    Je trouve le code vachement compliqué et je ne comprends pas pourquoi il y en a autant pour afficher simplement un article.

    Pourtant Drupal est réputé plus complexe et pourtant je suis arrivé à m'y retrouver assez rapidement, pourquoi pas avec Joomla! ?

    Code:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Templates.beez3
     *
     * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    $app = JFactory::getApplication();
    $templateparams = $app->getTemplate(true)->params;
    $images = json_decode($this->item->images);
    $urls = json_decode($this->item->urls);
    $user    = JFactory::getUser();
    JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
    JHtml::_('behavior.caption');
    
    // Create shortcut to parameters.
    $params = $this->item->params;
    
    ?>
    <article class="item-page<?php echo $this->pageclass_sfx?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
    
    <?php if ($this->params->get('show_page_heading') and $params->get('show_title')) :?>
    <hgroup>
    <?php endif; ?>
    <h1>
    	<?php echo $this->escape($this->params->get('page_heading')); ?>
    </h1>
    <?php endif; ?>
    <?php
    if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative)
    {
    	echo $this->item->pagination;
    }
    
    if ($params->get('show_title')) : ?>
    		<h2>
    			<?php echo $this->escape($this->item->title); ?>
    		</h2>
    <?php endif; ?>
    <?php if ($this->params->get('show_page_heading') and $params->get('show_title')) :?>
    </hgroup>
    <?php endif; ?>
    
    <?php if ($params->get('access-edit') ||  $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
    		<ul class="actions">
    		<?php if (!$this->print) : ?>
    				<?php if ($params->get('show_print_icon')) : ?>
    				<li class="print-icon">
    						<?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?>
    				</li>
    				<?php endif; ?>
    
    				<?php if ($params->get('show_email_icon')) : ?>
    				<li class="email-icon">
    						<?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?>
    				</li>
    				<?php endif; ?>
    				<?php if ($this->user->authorise('core.edit', 'com_content.article.' . $this->item->id)) : ?>
    						<li class="edit-icon">
    							<?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?>
    						</li>
    					<?php endif; ?>
    		<?php else : ?>
    				<li>
    						<?php echo JHtml::_('icon.print_screen', $this->item, $params, array(), true); ?>
    				</li>
    		<?php endif; ?>
    		</ul>
    <?php endif; ?>
    
    	<?php  if (!$params->get('show_intro')) :
    		echo $this->item->event->afterDisplayTitle;
    	endif; ?>
    
    	<?php echo $this->item->event->beforeDisplayContent; ?>
    
    <?php $useDefList = (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_parent_category'))
    	or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date'))
    	or ($params->get('show_hits'))); ?>
    
    <?php if ($useDefList) : ?>
     <dl class="article-info">
     <dt class="article-info-term"><?php  echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
    <?php endif; ?>
    <?php if ($params->get('show_parent_category') && $this->item->parent_slug != '1:root') : ?>
    		<dd class="parent-category-name">
    			<?php 	$title = $this->escape($this->item->parent_title);
    					$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?>
    			<?php if ($params->get('link_parent_category') and $this->item->parent_slug) : ?>
    				<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
    				<?php else : ?>
    				<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
    			<?php endif; ?>
    		</dd>
    <?php endif; ?>
    <?php if ($params->get('show_category')) : ?>
    		<dd class="category-name">
    			<?php 	$title = $this->escape($this->item->category_title);
    					$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
    			<?php if ($params->get('link_category') and $this->item->catslug) : ?>
    				<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
    				<?php else : ?>
    				<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
    			<?php endif; ?>
    		</dd>
    <?php endif; ?>
    <?php if ($params->get('show_create_date')) : ?>
    		<dd class="create">
    		<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?>
    		</dd>
    <?php endif; ?>
    <?php if ($params->get('show_modify_date')) : ?>
    		<dd class="modified">
    		<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?>
    		</dd>
    <?php endif; ?>
    <?php if ($params->get('show_publish_date')) : ?>
    		<dd class="published">
    		<?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?>
    		</dd>
    <?php endif; ?>
    <?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
    	<dd class="createdby">
    		<?php $author = $this->item->author; ?>
    		<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author);?>
    		<?php if (!empty($this->item->contact_link ) &&  $params->get('link_author') == true) : ?>
    			<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', $this->item->contact_link, $author)); ?>
    		<?php else : ?>
    			<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
    		<?php endif; ?>
    	</dd>
    <?php endif; ?>
    <?php if ($params->get('show_hits')) : ?>
    		<dd class="hits">
    		<?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
    		</dd>
    <?php endif; ?>
    <?php if ($useDefList) : ?>
     </dl>
    <?php endif; ?>
    
    	<?php if (isset ($this->item->toc)) : ?>
    		<?php echo $this->item->toc; ?>
    	<?php endif; ?>
    
    <?php if (isset($urls) AND ((!empty($urls->urls_position) AND ($urls->urls_position == '0')) OR ($params->get('urls_position') == '0' AND empty($urls->urls_position)))
    		OR (empty($urls->urls_position) AND (!$params->get('urls_position')))) : ?>
    
    	<?php echo $this->loadTemplate('links'); ?>
    <?php endif; ?>
    	<?php  if (isset($images->image_fulltext) and !empty($images->image_fulltext)) : ?>
    	<?php $imgfloat = (empty($images->float_fulltext)) ? $params->get('float_fulltext') : $images->float_fulltext; ?>
    
    	<div class="img-fulltext-<?php echo htmlspecialchars($imgfloat, ENT_COMPAT, 'UTF-8'); ?>">
    	<img
    		<?php if ($images->image_fulltext_caption):
    			echo 'class="caption"'.' title="' .htmlspecialchars($images->image_fulltext_caption, ENT_COMPAT, 'UTF-8') .'"';
    		endif; ?>
    		src="<?php echo htmlspecialchars($images->image_fulltext, ENT_COMPAT, 'UTF-8'); ?>" alt="<?php echo htmlspecialchars($images->image_fulltext_alt, ENT_COMPAT, 'UTF-8'); ?>"/>
    	</div>
    	<?php endif; ?>
    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND !$this->item->paginationposition AND !$this->item->paginationrelative):
    	echo $this->item->pagination;
    endif;
    ?>
    <?php if ($params->get('access-view')):?>
    	<?php echo $this->item->text; ?>
    	<?php // Optional teaser intro text for guests ?>
    	<?php elseif ($params->get('show_noauth') == true && $user->get('guest')) : ?>
    		<?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
    	<?php echo JHtml::_('content.prepare', $this->item->introtext); ?>
    	<?php // Optional link to let them register to see the whole article. ?>
    	<?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
    	<?php $menu = JFactory::getApplication()->getMenu(); ?>
    	<?php $active = $menu->getActive(); ?>
    	<?php $itemId = $active->id; ?>
    	<?php $link = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); ?>
    	<?php $link->setVar('return', base64_encode(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language))); ?>
    	<p class="readmore">
    		<a href="<?php echo $link; ?>" class="register">
    		<?php $attribs = json_decode($this->item->attribs); ?>
    		<?php
    		if ($attribs->alternative_readmore == null) :
    			echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
    		elseif ($readmore = $attribs->alternative_readmore) :
    			echo $readmore;
    			if ($params->get('show_readmore_title', 0) != 0) :
    				echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
    			endif;
    		elseif ($params->get('show_readmore_title', 0) == 0) :
    			echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
    		else :
    			echo JText::_('COM_CONTENT_READ_MORE');
    			echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
    		endif; ?>
    		</a>
    	</p>
    	<?php endif; ?>
    <?php endif; ?>
    <?php // TAGS ?>
    <?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
    	<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
    	<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
    <?php endif; ?>
    
    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND!$this->item->paginationrelative):
    	echo $this->item->pagination;?>
    <?php endif; ?>
    
    	<?php if (isset($urls) AND ((!empty($urls->urls_position) AND ($urls->urls_position == '1')) OR ( $params->get('urls_position') == '1'))) : ?>
    
    	<?php echo $this->loadTemplate('links'); ?>
    	<?php endif; ?>
    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND $this->item->paginationrelative):
    	echo $this->item->pagination;?>
    <?php endif; ?>
    	<?php echo $this->item->event->afterDisplayContent; ?>
    </article>
    Sérieusement je vois pas comment me débrouiller avec ce fichier. Avez-vous des conseils ou autre à me donner ? Merci !

  • #2
    Re : Comment s'y retrouver dans le développement sur Joomla! ?

    Bonsoir,
    je pense que tu prends le truc par le mauvais bout ... le template, c'est l'habillage du site ... un article ... c'est autre chose, même s'il s'affiche.
    Tu voulais faire quoi au juste ?
    Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer
    Cette année, le JoomlaDay FR a lieu à Bruxelles, les 20 et 21 mai 2022, plus d'infos et inscriptions : www.joomladay.fr

    Commentaire


    • #3
      Re : Comment s'y retrouver dans le développement sur Joomla! ?

      Salut
      tu attaques direct le code, hé ben dis donc c'est une approche spéciale
      Je te conseille un peu de lecture francophone:

      sur les templates


      sur joomla


      Ensuite n'hésite pas à poser des questions sur le forum, en précisant ton besoin pour qu'on puisse t'aider au mieux
      CEd
      Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
      http://www.template-creator.com Outil de création de templates
      Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

      Commentaire


      • #4
        Re : Comment s'y retrouver dans le développement sur Joomla! ?

        PS : le wiki est aussi la doc officielle où tu trouveras des tas d'infos
        Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
        http://www.template-creator.com Outil de création de templates
        Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

        Commentaire


        • #5
          pour moi, tu as un soucis avec l anglais informatique si ca ne te parles pas.......
          second conseil n'hesites pas à utiliser print_r et var_dump pour voir le contenu des objets....

          Second point quelles personnalisations veut tu faire ?
          Si c est pour enlever des informations visibles :
          As tu réglé les paramètres dans l'interface d 'edition du template ?

          Car si c est pour rajouter des styles css, ca se passe directement avec firebug et le fichier user.css du template.

          Pourquoi autant de code pour afficher un article ?
          Car tu as les paramètres définis dans l'interface d'administration qui sont téstés et utilisés pour déterminer ce qui doit etre affiché.

          Un article se decompose en plusieurs parties, ce n'est pas un bloc unique de code avec une serie d' echo.....

          Tiens, je vais te faire une traduction du code que tu as mis ds ton post
          Code:
          defined('_JEXEC') or die;
          Cette ligne est obligatoire : elle sert à détérminer si tu est dans une session Joomla. Sans elle rien ne fonctionnes.
          Code:
          $app = JFactory::getApplication();
          $templateparams = $app->getTemplate(true)->params;
          $images = json_decode($this->item->images);
          $urls = json_decode($this->item->urls);
          $user    = JFactory::getUser();
          JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
          JHtml::_('behavior.caption');
          
          // Create shortcut to parameters.
          $params = $this->item->params;
          les lignes ci dessus servent à créer les objets dont on a besoin pour cette vue.
          $app est l'objet application. il contient les infos de la page entière (et non de l'article uniquement).

          $templateparams contient les paramètres du template définis dans l'administration
          Ces paramètres sont récupérés dans l'objet application, uniquement ceux qui ceux qui sont vrais ou non nuls.

          $images contient un tableau avec les liens vers les images définies dans les paramètres de ton article.

          $urls contient les 3 urls que tu defini dans les paramètres de ton article.

          $user est un objet qui contient les infos de l'utlisateur. Ces paramètres sont utilisés pour savoir s il a le droit d'editer l'article en frontal et d autres besoin.(getuser = recuperer l'utilisateur).



          JHtml::_('behavior.caption') sert a charger des fonctions javascript pour les legendes des images. Cela génere la classe img.caption dans le code html.


          $this->item contient les infos de l'element de contenu courant...

          LE contenu de cet objet varie en fonction du contexte: la tu est dans un article, donc cela concernes l article.
          Dans un module ce sera les paramètres et informations du module.....

          PS: tu veut la suite du code ?
          Dernière édition par lefabdu51 à 25/04/2017, 10h51

          Commentaire


          • #6
            Re : Comment s'y retrouver dans le développement sur Joomla! ?

            Merci c'est déjà un peu plus clair.

            Je n'ai pas de soucis avec l'anglais, je comprend plus ou moins ce qui se passe, mais quand je vois un

            $this->item->toc
            Et bien c'est le flou total. Sinon maintenant que je sais que cela équivaut à des paramètres, c'est déjà bien plus clair. C'est vraiment poussé dit donc !

            La suite du code ne sera pas nécessaire, ça me fait moins peur maintenant

            Je ne savais pas du coup qu'on pouvait paramétrer autant de choses sur l'affichage d'un article.

            Sinon oui, je suis du genre à débouler directement dans le code source. Généralement je m'y retrouve très facilement, mais avec Joomla! je suis dis "WTF ?" quand j'ai vu tout le code pour afficher un article.

            Merci en tout cas

            Commentaire


            • #7
              Re : Comment s'y retrouver dans le développement sur Joomla! ?

              Sinon oui, je suis du genre à débouler directement dans le code source. Généralement je m'y retrouve très facilement, mais avec Joomla! je suis dis "WTF ?" quand j'ai vu tout le code pour afficher un article.
              Très mauvais reflexe si tu es dans un CMS ... qui dit CMS, dit mise a jour ... tout ce que tu rajouteras ou modifieras directement dans le code source sera surement effacé a la 1ere mise a jour ... que ce soit dans le core de Joomla! ou ses extensions
              C'est pareil pour les autres CMS ...
              Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer
              Cette année, le JoomlaDay FR a lieu à Bruxelles, les 20 et 21 mai 2022, plus d'infos et inscriptions : www.joomladay.fr

              Commentaire


              • #8
                Re : Comment s'y retrouver dans le développement sur Joomla! ?

                Envoyé par manu93fr Voir le message
                Très mauvais reflexe si tu es dans un CMS ... qui dit CMS, dit mise a jour ... tout ce que tu rajouteras ou modifieras directement dans le code source sera surement effacé a la 1ere mise a jour ... que ce soit dans le core de Joomla! ou ses extensions
                C'est pareil pour les autres CMS ...
                Bah là il est question de mon template ? Je ne modifie pas le code source de Joomla! ni les modules, mais je suis parti regardé le code source du thème par défaut afin de savoir quel est le fichier qui s'occupe d'afficher un article afin de le personnaliser. Je regarde directement un code source afin de comprendre le fonctionnement et ainsi mettre en place mon template ou module, tout simplement.

                C'est clair que modifier le code source du CMS c'est une très mauvaise approche

                Commentaire


                • #9
                  Re : Comment s'y retrouver dans le développement sur Joomla! ?

                  C'est vraiment poussé dit donc !
                  oui les choses sont très structurées, une fois que tu comprends le MVC tu arrives à suivre le chemin facilement
                  Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
                  http://www.template-creator.com Outil de création de templates
                  Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

                  Commentaire


                  • #10
                    Re : Comment s'y retrouver dans le développement sur Joomla! ?

                    une precision, beaucoup de code c'est clair.... Mais c est du au nombreux paramètres que tu peut definir via l'interface admin ou en utilisant les fonctions d'edition sur la partie visiteur de ton site.
                    Pour l'utilisateur lambda, c est plus simple de régler ce qu il veut afficher avec des clics souris qu en modifiant des lignes de code.

                    $this->item->event sert pour les plugins de contenu qui doivent etre lancés a certains moments ($this->item->event->afterDisplayTitle; = evenement après l affichage du titre).......

                    Introtext = texte d'introduction de ton article. Il est situé avant le lien lire lasuite que tu insere ds ton article

                    Fulltext =texte complet de l'article = tout se qui se situes apres le lien lire lasuite.

                    Si aucun lien lire la suite dans l'article, alors tout le texte est considéré comme texte dintro et non texte complet.

                    C'est le contenu de $templateparams qui est utilisé pour les boucles if que tu vois dans ce code....


                    Je ne savais pas du coup qu'on pouvait paramétrer autant de choses sur l'affichage d'un article.
                    regardes l'interface... chaque element que tu vois est un paramètre, donc tu as de quoi tester...

                    mais quand je vois un

                    $this->item->toc
                    Et bien c'est le flou total.
                    utilise var_dump ou print_r ca sera mieux visible pour toi et surtout moins flou.....
                    Dernière édition par lefabdu51 à 26/04/2017, 20h10

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X