Advanced Custom Field

Eléphanteau du PHP | 46 Messages

27 mai 2020, 03:31

bonjour

je suis en train de coder une fonction de type 'render' concernant ACF (Advanced Custom Field pour Wordpress).
si certain d'entre vous ont des idées pour l'améliorée je suis preneur.

notamment :
  • - je cherche a insérer la possibilité d'afficher le label pour chaque champ via une option (surement via une condition sur chaque type de champ)
    - je cherche a favoriser la clarté du HTML qui va être généré par cette fonction et a le structuré de telle sorte qu'il soit facilement customisable en CSS
    - et enfin j’hésite a créer une classe pour mes objet groupe et une pour mes objets fields afin d’améliorer la clarté du code
qu'en pensez vous ?

	function render_acf_fields_2()
	{
		//initialisation de la liste des groupes
		$groups = acf_get_field_groups(array('post_id' => get_the_ID()));
		$i = 0;
		// var_dump($groups);

		while ($i < count($groups)) {
			//initialisation de la liste des champs du groupe
			$array = acf_get_fields($groups[$i]['key']);
			$j = 0;
			// var_dump($array);
			echo '<div class="' . $groups[$i]['key'] .' '.strtolower(str_replace(" ","-", $groups[$i]['title'])). '">';
			echo 'i = ' . $i . '<br/>';

			//traitement et affichage des champs
			while ($j < count($array)) {
				echo 'j = ' . $j . '<br/>';

				//champs de type image
				if($array[$j]['type']==='image'){
					$thumbnail = get_field($array[$j]['key']); 
					$size = 'full';
					if ( $thumbnail ){
						echo wp_get_attachment_image( $thumbnail, $size );
					}
				}

				//champs de tgype fichier
				elseif($array[$j]['type']==='file'){
					$file = get_field( $array[$j]['key'] );
					if ( $file ){
						echo '<a href="'. esc_url( $file['url'] ).'">'. esc_html( $file['filename'] ).'</a>';
					}
				}
				//champs de type post_object !!! => ce type est particulier et je manque d'information a son sujet pour le moment
				//le code source de la condition est commenter, je l'ai repris sur le site d'ACF et il ne fonctionne pas
				elseif($array[$j]['type']==='post_object')
				{
					// $pub = get_field( $array[$j]['key'] );
					// if ( $pub ){
					// 		$post = $pub;
					// 		setup_postdata( $post );
					// 		var_dump('<a href="'.the_permalink().'">'. the_title().'</a>');
					// 		wp_reset_postdata();

					// 	}
				}
				else
				{
					the_field($array[$j]['key']);
				}
				$j++;
			}
			$i++;
			echo '</div>';

		}
	}

Eléphant du PHP | 111 Messages

27 mai 2020, 07:35

Bonjour,
pourquoi ne pas utiliser des infobulles sur les champs comme ça au "survolage" de la souris cela s'affiche
tu as tooltip en javascript qui le fait bien (ou pas trop mal, en fonction du navigateur client, les bulles se placent tout le temps en bas et ne peuvent pas être positionnée comme tu veux)

ou en CSS pur et dur : qui a l'avantage de ne pas pouvoir être désactivé par l'utilisateur/client, à contratrio du JS
/* <label><a href="#" class="info">Advanced 3D/4D<div>3D/4D Activation and TUI and singleView</div></a></label>
Pour faire des infos bulles en CSS et html directement*/
a.info {
    position: relative;
    color: black;
    text-decoration: none;
    border-bottom: 1px solid red ; /* On souligne le texte. */
    }
a.info div     {
    display: none; /* On masque l'infobulle. */
    }
a.info:hover {
    background: none; /* Correction d'un bug d'Internet Explorer. */
    z-index: 500; /* On définit une valeur pour l'ordre d'affichage. */
    cursor: help;
    }
a.info:hover div {
    display: inline; /* On affiche l'infobulle. */
    position: absolute;
    white-space: nowrap; /* On change la valeur de la propriété white-space pour qu'il n'y ait pas de retour à la ligne non désiré. */
    bottom:  30px; /* On positionne notre infobulle. */
    left: 50px;
    background: white;
    color: red;
    padding: 3px;
    border: 1px solid red;
    border-left: 4px solid red;
    }

Eléphanteau du PHP | 46 Messages

27 mai 2020, 07:43

pardon je n'ai pas été assez precis sur ma recherche exacte.
effectivement une infobulle pourrait etre une option pour afficher le label mais pour l'instant ce que je cherche exactement c'est le moyen d'attribué dynamiquement mes classe CSS en fonction du contenu/champ que je doit afficher.

meme si pour l'affichage du label c'est une idée.. :)