We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19325
    • 47 Posts
    Bonjour,

    Je suis en train de créer un snippet pour une page de mon site, mais je voudrais que quand j’utilise ce snippet, il rajoute des lignes entre le <head> et le </head> de ma page. C’est pour rajouter une fonction javascript et/ou un fichier css à prendre en compte avec ce snippet par exemple.

    Merci pour votre aide.
      • 11975
      • 2,542 Posts
      Salut,

      MODx offre déjà ce type de fonctionnalités smiley

      Voilà un bout de code que j’utilise et qui provient de eForm (auteur Tobyl)

      <?php
      
      //Add js and css stuff in front end
      	//taken form eform
      	//author Jaelle Jabber => Tobyl
      	
      	function efLoadTemplate($key){
      		global $modx;
      		if( strlen($key)>50 ) return $key;
      		$tpl = false;
      		if( is_numeric($key) ) { //get from document id
      			//try unpublished docs first
      			$tpl = ( $doc=$modx->getDocument($key,'content',0) )? $doc['content'] :false;
      			if(!$tpl )
      				$tpl = ( $doc=$modx->getDocument($key,'content',1) )? $doc['content'] : false;
      
      		}elseif( $key ){
      			$tpl = ( $doc=$modx->getChunk($key) )? $doc : false;
      			//try snippet if chunk is not found
      			if(!$tpl) $tpl = ( $doc=$modx->runSnippet($key) )? $doc : false;
      		}
      		return $tpl;
      		
      	}
      
      
      	# registers css and/or javascript to modx class
      	function efRegisterStartupBlock($src_array,$noScript=false){
      	global $modx;
      	
      	if(!array($src_array)) return;
      
      		foreach($src_array as $item){
      			list($src,$type) = $item;
      			//skip scripts if told to do so
      			if($type=='javascript' && $noScript) continue;
      			//try to load from document or chunk
      			if( $tmp = $this->efLoadtemplate($src) )
      				$src = $tmp;
      			
      			$src=trim($src);
      
       		if ( $type=='css' )
      			$modx->regClientCSS($src);
      		elseif ( $type == 'javascript' )
      			$modx->regClientStartupScript($src);
      		else
      			$modx->regClientStartupHTMLBlock($src);
      
      		}//end foreach
      	
      	}
      
      


      Les fonctions sont => regClientStartupScript et regClientStartupHTMLBlock


      Dans mon snippet

      <?php
      //En debut de script
      
      //JS and CSS stuff taken form eform author Jaelle Jabber A.K.A tobyl
      //added eFormCSS and eFormJS parameters
      	//these will be added to the HEAD section of the document when the form is displayed!
      if($cssStyle){
      		$cssStyle = ( strpos($cssStyle,',') && !strpos($cssStyle,'<style') ) ? explode(',',$cssStyle) : array($cssStyle);
      		foreach( $cssStyle as $tmp ) $startupSource[]= array($tmp,'css');
      }
      if($jScript){
      		$jScript = ( strpos($jScript,',') && !strpos($jScript,'<script') ) ? explode(',',$jScript) : array($jScript);
      		foreach( $jScript as $tmp )
      		$startupSource[]= array($tmp,'javascript');
      }
      
      //et enfin
      
      	//register css and/or javascript
      	if(isset($startupSource) ) $tveditor->functions->efRegisterStartupBlock($startupSource);
      	
      
      

      :-)
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 19325
        • 47 Posts
        Je m’en doutais que çà existait ....

        Mais je le trouvait pas => ma question sur le forum ....

        Merci beaucoup ...

          • 19325
          • 47 Posts
          Euh.... çà s’utilise comment ?
            • 11975
            • 2,542 Posts
            Pour ma part j’ai rangé les fonctions de Tobyl dans une classe

            d’où le
            //try to load from document or chunk
            if( $tmp = $this->efLoadtemplate($src) )
            $src = $tmp;

            J’ai édité mon message pour rajouter l’appel des fonctions depuis le snippet.
            Ainsi en passant &cssStyle=`monfichier.css` on ajoute la css dans le header.

            :-)
              Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
              • 19325
              • 47 Posts
              Euh... pas tout compris...

              Dis moi, je met tout dans un seul snippet ?

                • 5727
                • 160 Posts
                En faite, ce qu’ils disent c’est que dépendamment de quel genre de contenu tu veux ajouter dans le header, tu utilises une des trois fonctions suivantes:

                // Pour du CSS
                $modx->regClientCSS($src);
                
                // Pour du javascript
                $modx->regClientStartupScript($src);
                
                // Pour du HTML en général
                $modx->regClientStartupHTMLBlock($src);


                Le code à inclure doit être contenu dans la variable $src.
                  Olivier Deland
                  Montreal, Canada - Web Developer
                  • 19325
                  • 47 Posts
                  Merci.