Je travaille sur un composant Joomla, qui inclut des hyperliens. J'aimerais inclure les URL des liens dans la configuration du composant. Par conséquent, j'ai ajouté un config.xml
Au répertoire principal avec les champs de formulaire pour les URL.
Le code XML pour les champs ressemble à ceci:
<field
name="url-json"
type="url"
class="inputUrl"
default="http://www.website...&option=A&id=1234"
label="COM_CUSTOM_CONFIG_LABEL"
description="COM_CUSTOM_CONFIG_DESC"
size="50"
/>
J'ai plusieurs URL et la partie importante sont les paramètres de requête. J'ai défini la taille sur size="50"
Mais celle-ci est remplacée par CSS et tous les champs de saisie ont la même largeur. De cette façon, on ne peut pas voir les paramètres de requête des URL, car ils sont coupés.
Existe-t-il un moyen d'ajouter du CSS personnalisé pour élargir les champs de texte?
J'ai déjà ajouté class="inputUrl"
Aux champs, mais je ne sais pas où j'ajouterais les règles CSS. Puis-je $document->addStyleDeclaration( $style );
quelque part pour charger des styles uniquement pour la page de configuration de mon composant?
Il y a deux alternatives.
Vous pouvez ajouter des styles ou une feuille de style à l'administrateur en utilisant la technique suivante:
Comment ajouter un fichier JS/CSS personnalisé sans modifier le modèle (à partir d'une extension)?
L'utilisation de $ app-> isClient ('administrateur') vous permettra d'ajouter des CSS uniquement à l'administrateur. Si vous voulez vraiment charger uniquement sur votre page, vous pouvez creuser dans le jinput autant que vous le souhaitez. par exemple.
class plgSystemRandomname extends JPlugin
{
function onBeforeCompileHead()
{
$doc = JFactory::getDocument();
$app = JFactory::getApplication();
if ($app->isClient('administrator')){
$jinput = $app->input;
$option = $jinput->get('option','','CMD');
$component = $jinput->get('component','','CMD');
if($option == "com_config" && $component == "com_yourcomponent"){
$doc->addStyleDeclaration('.inputUrl{width:90% !important;}');
}
}
}
}
Notez que isClient est uniquement J3.7 +.
Croyez-le ou non, en utilisant un champ de formulaire personnalisé, vous pouvez insérer tout ce que vous souhaitez dans un jform où vous êtes autrement limité au schéma xml.
https://docs.joomla.org/Creating_a_custom_form_field_type
Une fois que vous avez défini votre chemin de champ dans la configuration XML, par exemple.
<fieldset name="basic" addfieldpath="components/com_something/fields">
Vous pouvez ensuite inclure un champ de formulaire personnalisé, par exemple.
<field name="customscript" type="customscript" label="" description="" />
Votre code de champ de formulaire actuel dans components/com_something/fields/customscript.php ressemble à ceci:
defined('_JEXEC') or die('Restricted access');
jimport('joomla.form.formfield');
class JFormFieldCustomscript extends JFormField {
protected $type = 'customscript';
public function getInput() {
return '<style>.inputUrl{width:90% !important;}</style>';
}
}
Inspiré par la deuxième option de la réponse de jamesgarett , je construis un champ de formulaire personnalisé qui étend le champ de formulaire url.
Un problème mineur avec la méthode de james est que joomla n'inclut pas seulement le <style>...</style>
_ mais aussi quelques balises autour. Ce qui ressemble à ceci:
<div class="control-label">
<label id="jform...></label>
</div>
<div class="controls">
<style> ... </style>
</div>
Cela provoque une lacune dans la mise en page car il n'y a pas de contenu.
Au lieu d'utiliser un champ de formulaire distinct qui inclut le style, j'ai étendu le champ de formulaire url pour créer un champ de formulaire longurl
, qui a ajouté des styles en ligne.
defined('_JEXEC') or die('Restricted access');
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('url');
class JFormFieldLongurl extends JFormFieldUrl {
protected $type = 'longurl';
public function getInput() {
$input = parent::getInput();
$pattern = 'type="url"';
$style= ' style="width:90%"';
return str_replace($pattern, $pattern.$style, $input);
}
}
En incluant
<fieldset name="basic" addfieldpath="administrator/components/com_something/fields">
on peut utiliser un champ de formulaire de type longurl
pour les URL nécessitant plus d'espace
<field
name="url-json"
type="longurl"
default="http://www.website...&option=A&id=1234"
label="COM_CUSTOM_CONFIG_LABEL"
description="COM_CUSTOM_CONFIG_DESC"
size="50"
/>