web-dev-qa-db-fra.com

Titre du type de champ de formulaire Echo Catégorie dans le module

Je construis un module et utilise le type de champ Catégorie, comme indiqué dans la documentation Joomla ici https://docs.joomla.org/Category_form_field_type

Dans le module XML, j'ai utilisé ce qui suit:

<field name="catOne" type="category" extension="com_content" label="Select a category" description="" />
<field name="catTwo" type="category" extension="com_content" label="Select a category" description="" />
<field name="catThree" type="category" extension="com_content" label="Select a category" description="" />
<field name="catFour" type="category" extension="com_content" label="Select a category" description="" />

Chaque fois que je fais écho à ceux-ci dans l'interface, je reçois simplement l'ID de la catégorie. Comment puis-je faire écho au titre de la catégorie et à l'URL associée pour chacune des variables ci-dessus?

1
RustyJoomla

Vous avez l'ID de la catégorie, vous pouvez donc effectuer une requête dans la base de données pour obtenir le title, comme suit:

Obtenez le titre de l'ID:

// Get the category parameter value 
// Define a default value of 0
$cat_id = $params->get('catOne', 0);

// Get instance of database connection
$db = JFactory::getDbo();

// Query the #__categories table in the database
$query = $db->getQuery(true);
$query->select($db->quoteName('title'))
      ->from($db->quoteName('#__categories'))
      ->where($db->quoteName('id') . ' = '. (int)$cat_id);
$db->setQuery($query);

// Try and get the result
try
{
    $result = $db->loadResult();
}
catch (Exception $e)
{
    // If there is no result, make the variable empty
    $result = '';
}

// Display the result
echo $result;

Afficher un lien:

Pour afficher l'URL de la catégorie, vous devez importer le routeur de com_content:

require_once JPATH_SITE . '/components/com_content/helpers/route.php';

$link = JRoute::_('index.php?option=com_content&view=category&layout=blog&id=' . $cat_id);

echo '<a href="' . $link . '">' . $result . '</a>';

Pour plusieurs paramètres, utilisez une fonction:

function displayCategoryLink($id)
{
    require_once JPATH_SITE . '/components/com_content/helpers/route.php';

    $db = JFactory::getDbo();

    $query = $db->getQuery(true);
    $query->select($db->quoteName('title'))
          ->from($db->quoteName('#__categories'))
          ->where($db->quoteName('id') . ' = '. (int)$id);
    $db->setQuery($query);

    try
    {
        $result = $db->loadResult();
    }
    catch (Exception $e)
    {
        $result = '';
    }

    $link = JRoute::_('index.php?option=com_content&view=category&layout=blog&id=' . $id);   
    $html = '<a href="' . $link . '">' . $result . '</a>';

    return $html;
}


displayCategoryLink($params->get('catOne', 0));
displayCategoryLink($params->get('catTwo', 0));
displayCategoryLink($params->get('catThree', 0));
displayCategoryLink($params->get('catFour', 0));

La fonction ci-dessus est simplement basique. Je suggérerais bien sûr que vous mettiez la fonction dans une classe, dans un fichier helper.php et que vous l'appeliez correctement

J'espère que cela t'aides

1
Lodder