Page 1 sur 1

Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 16 mars 2010, 16:38
par chabi01
Edit : je ne peux pas joindre le fichier.. Si nécessaire, je peux l'envoyer...

Bonjour à tous,
Je viens ici en espérant que ce problème peut faire tilter quelqu'un sur ce forum...

Sur Joomla, il existe un composant "Admanager". Ce composant permet de gérer un système de petites annonces.

Un administrateur peut créer un champ dans la base, et dès lors, le champ est disponible à ceux qui posent une annonce.

Lorsqu'une personne demande à voir une annonce, le détails de l'annonce est générée en un seul bloc avec cette ligne de code :
foreach($fDisplay[6] as $field)
{
adsmanager_html::showFieldValue($row,$field,$field_values,$conf->email_display,$option,$itemid,1,$plugins); /* 1 = Ad Mode */	
}
Où nous avons ici les éléments $fields qui correspond au titre du champ et $field au texte tapé par celui qui a créé l'annonce.
Exemple :
Nom : toto
prénom : titi

Le problème...
Tout est généré en un seul bloc...
Ce qui est cherché : comment formater le bloc pour qu'il soit possible de formater "le nom du champ" (mettre celui ci en gras par exemple pour le faire ressortir....)

Je cherche donc à savoir si :
- il faut réécrire toute la fonction,
- il est possible de faire un traitement avant(intégrer le formatage au moment où $fields est appelé) ou après (la chaine est générée, faire un découpage de la chaine)

Vous remerciant si vous avez des infos sur ceci !
Je joins le fichier php complet si nécessaire.
Cordialement,
Chabi01

Re: Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 16 mars 2010, 19:38
par Patriboom
Ce que je fais dans de pareils cas, c'est de remonter à la source.

Ici "adsmanager_html::showFieldValue" réfère à d'autres fonctions qui, elles- traitent les morceaux. Il te faudrait donc remonter jusqu'au lieu de traitement, soit la fonction showFieldValue pour apporter les modifications souhaitées.

Il est parfois difficile de s'y retrouver dans un CMS complexe comme Joomla, aussi ce que je fais pour me simplifier la vie c'est une recherche de fichier par "qui contient le texte .." Dans ton cas, je ferais chercher touts les fichiers contenant "showFieldValue" Un seul contiendra la "function showFieldValue" . C'est sur celui-là qu'il faut travailler.

Re: Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 17 mars 2010, 00:24
par chabi01
Merci Patriboom,
J'ai bien regardé la fonction (dans le même fichier), mais mon problème reste entier (j'essaye de résoudre ce souci depuis loooooogtemps !!!)
Je te copie le code de la fonction ainsi que la classe appelée (adsmanager_htpl) ci dessous au cas où cela te fait tilter !
D'après ce que j'ai vu, le problème se pose dans bien des forums et dans bien des pays, mais personne n'arrive à trouver de solution à ce truc !!
function showFieldValue($row,$field,$field_values,$email_display,$option,$itemid,$mode,$plugins)
	{
		global $mosConfig_live_site,$mosConfig_absolute_path;
		
		if ((strpos($field->catsid, ",$row->catid,") !== false)||(strpos($field->catsid, ",-1,") !== false))
		{
			if (($field->type != 'checkbox')&&(($field->display_title & $mode) == $mode))
			{
				echo adsmanager_html::getLangDefinition($field->title).": ";
			}
			
			if ($field->title)
				$name = $field->name;
				
			$value = "";
			$value = "\$row->".$field->name;
			eval("if (isset($value)) \$value = \"$value\";");
			$value = adsmanager_html::getLangDefinition($value);
			switch($field->type)
			{
				case 'checkbox':
					if (($field->display_title & $mode) == $mode)
					{
						echo adsmanager_html::getLangDefinition($field->title);
						if ($value == 1)
							echo ":&nbsp;".ADSMANAGER_YES."<br />";
						else
							echo ":&nbsp;".ADSMANAGER_NO."<br />";
					}
					else if ($value == 1)
					{
						echo adsmanager_html::getLangDefinition($field->title)."<br />";
					}		
					break;
					
				case 'multicheckbox':
				case 'multicheckboximage':
					
					for($i=0,$nb=count($field_values[$field->fieldid]);$i < $nb ;$i++)
					{
						$fieldvalue = @$field_values[$field->fieldid][$i]->fieldvalue;
						$fieldtitle = @$field_values[$field->fieldid][$i]->fieldtitle;

						if (strpos($value, $fieldvalue) !== false)
						{
							if ($field->type == 'multicheckbox')
								$return = adsmanager_html::getLangDefinition($fieldtitle);
							else
								$return = "<img src='".$mosConfig_live_site."/images/com_adsmanager/fields/".$fieldtitle."' alt='$fieldtitle' />";
							echo $return."<br />";
						}
					}
					
					break;
					
				case 'url':
					if ((isset($field->link_text))&&($field->link_text != ""))
						$linkObj = $field->link_text;
					else if ((isset($field->link_image))&&(file_exists($mosConfig_absolute_path."/images/com_adsmanager/fields/".$field->link_image)))
						$linkObj = "<img src='".$mosConfig_live_site."/images/com_adsmanager/fields/".$field->link_image."' />";
					else
					{
						$linkObj = $value;
						}
					if ($value != "")
					{
						$return = "<a href='http://$value' target='_blank'>$linkObj</a>";
					}
					echo $return;
					break;
					
				case 'date':
					$return = $value;	
					echo $return;
					break;
	
				case 'select':
					if (isset($field_values[$field->fieldid])) {
					foreach($field_values[$field->fieldid] as $v)
					{
						if ($value == $v->fieldvalue)
						{
							echo adsmanager_html::getLangDefinition($v->fieldtitle)."<br />";
						}
					}
					}
					break;
	
				case 'multiselect':
					if (isset($field_values[$field->fieldid])) {
					foreach($field_values[$field->fieldid] as $v)
					{
						if (strpos($value, ",".$v->fieldvalue.",") === false)
						{
						}
						else
						{
							echo adsmanager_html::getLangDefinition($v->fieldtitle)."<br />";
						}
					}
					}
					break;
				
				case 'emailaddress':
					if ($value != "")
					{
						switch($email_display) {
							case 2:
								$emailForm = sefRelToAbs("index.php?option=$option&page=show_message_form&mode=0&adid=".$row->id."&Itemid=".$itemid);
								echo '<a href="'.$emailForm.'">'.ADSMANAGER_EMAIL_FORM.'</a><br />';
								break;
							case 1:
								echo adsmanager_html::Txt2Png($value,$option);
								break;
							default:
								echo ADSMANAGER_FORM_EMAIL.": <a href='mailto:".$value."'>".adsmanager_html::cutLongWord($value)."</a>";
								break;
						
						}
					}
					break;
				
				case 'textarea':
					echo adsmanager_html::cutLongWord(str_replace(array("\r\n", "\n", "\r"), "<br />", $value))."<br />";
					break;
				
				case 'editor':
				case 'number':
				case 'text':
					echo adsmanager_html::cutLongWord($value)."<br />";
					break;
				case 'price':
					if ($value != "")
						echo sprintf(ADSMANAGER_DEVICE,$value);
					echo "<br />";
					break;
				case 'radio':	
				case 'radioimage':	
					for($i=0,$nb=count($field_values[$field->fieldid]);$i < $nb ;$i++)
					{
						$fieldvalue = @$field_values[$field->fieldid][$i]->fieldvalue;
						$fieldtitle = @$field_values[$field->fieldid][$i]->fieldtitle;
						if ($value == $fieldvalue)
						{
							if ($field->type == 'radio')
								$return = $fieldtitle;
							else
								$return = "<img src='".$mosConfig_live_site."/images/com_adsmanager/fields/".$fieldtitle."' alt='$fieldtitle' />";					
							echo $return;
						}
					}
					break;
				case 'file':
					if ($value != "")
					{
						echo "<a href='$mosConfig_live_site/images/com_adsmanager/files/$value' target='_blank'>".ADSMANAGER_DOWNLOAD_FILE."</a></b>";
						echo "<br />";
					}
					break;
					
				default:
					if (isset($plugins[$field->type]))
					{
						if ($mode == 1)
							$return = $plugins[$field->type]->getListDisplay($row->id,$field );
						else
							$return = $plugins[$field->type]->getDetailsDisplay($row->id,$field );
						echo $return;
					}
					break;
			}
		}
	}
	

et la classe...
class adsmanager_html {

	function getLangDefinition($text) {
		if(defined($text)) $returnText = constant($text); 
		else $returnText = $text;
		return $returnText;
	}

Re: Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 17 mars 2010, 00:59
par Patriboom
Ah oui, ça me fait titiller.

Quel est l'objectif précis? Ajouter du caractère gras quelque part?

Re: Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 17 mars 2010, 10:20
par chabi01
Bonjour Patriboom !
Je suis content que tu aies une idée pour résoudre ça !!

Je te donne un site exemple pour voir le résultat d'une annonce affichée :
http://www.kayoo.nc/petites-annonces?p ... &catid=73

Tu peux voir que l'annonce est affichée avec les champs comme ça :
"...
nom : toto
prénom : titi
adresse : rue des lilas
..."
ce qu'il faut mettre en gras, c'est "nom", "prénom", et "adresse" et les autres champs pouvant suivre.

J'ai hate de voir comment tu vas résoudre le truc !
Grand merci à toi !

Re: Reprise d'une fonction existante (Adsmanager - Joomla)

Posté : 18 mars 2010, 08:50
par chabi01
Pour info,
Problème résolu : il fallait bien changer le code dans la fonction comme l'indiquait Patriboom (merciii !)

Au cas où cela sert à d'autres :
chercher dans le bloc suivant (autour de la ligne 137 dans le fichier adsmanager.html.php dans le dossier component/com_adsmanager :

Code:
function showFieldValue($row,$field,$field_values,$email_display,$option,$itemid,$mode,$plugins)
	{
		global $mosConfig_live_site,$mosConfig_absolute_path;
		
		if ((strpos($field->catsid, ",$row->catid,") !== false)||(strpos($field->catsid, ",-1,") !== false))
		{
			if (($field->type != 'checkbox')&&(($field->display_title & $mode) == $mode))
			{
				echo adsmanager_html::getLangDefinition($field->title).": ";
			}
La ligne qui nous intéresse est :
Code:
echo adsmanager_html::getLangDefinition($field->title).": ";
C'est elle qui est utilisée pour formater le titre de tes champs personnalisés.

Pour exemple, le formatage si je veux simplement avoir le texte en gras :

Code:
echo '<b>'.adsmanager_html::getLangDefinition($field->title).'</b> : ';
Encore merci à Patriboom pour son aiguillage !
Cordialement,