web-dev-qa-db-fra.com

Obtenir la clé de la catégorie dans Magento

Comment puis-je obtenir la clé URL d'une catégorie dans Magento. J'ai ajouté ce texte dans le champ clé URL du CMS:

Category-1

Voici comment j'essaie actuellement d'afficher l'URL de ma catégorie dans une ancre:

$_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active');

<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getCategoryUrl($_category); ?>">
  <?php endforeach; ?>

Mais chaque fois que je vérifie ma sortie, cela reste comme ceci:

<a href="">
            <span>Manual Tile Cutters</span>
        </a>

J'ai déjà consulté google et les forums magento pour cela, mais je ne trouve toujours pas de réponse suffisante.

Aussi, est-ce que ce que j'essaie d'appeler dans l'ancre est la clé de l'URL, ou s'agit-il d'une URL différente?

9
marchemike

Les deux autres réponses il y a une pénalité DB. Le meilleur moyen d’ajouter des informations d’URL de catégorie est au niveau de la collection. Il vous suffit de l’utiliser à votre guise dans vos fichiers de modèle. Ajustez votre code comme suit:

    $_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active')
                     ->addUrlRewriteToResult();

<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getUrl($_category); ?>">
  <?php endforeach; ?>

Notez la méthode supplémentaire appliquée à la collection de catégories appelée addUrlRewriteToResult() et appelez l'URL en utilisant la fonction getUrl() à la place de ce que vous aviez auparavant, qui était getCategoryUrl() (rien de tel dans le code).

Soit dit en passant, votre code devrait fonctionner correctement si vous appelez getUrl(), mais aura un impact négatif sur les performances.

J'espère que ça aide.

17
Ron

Peut-être que je n'ai pas bien compris la question, mais le code ci-dessous vous donnera l'URL d'une catégorie étant donné l'identifiant

<?php $category = Mage::getModel('catalog/category')->load(4); ?>
<a href="<?php echo $category->getUrl(); ?>">

Changez simplement l'id 4 dans load () avec celui dont vous avez besoin

16
ThanosDi

L'utilisation de modèles Magento (Catégorie) peut devenir très lourde à charger uniquement pour charger l'URL de la catégorie. Lorsque vous êtes dans une boucle où vous devez charger les URL de plus de 9 000 URL de catégorie, vous pouvez utiliser la fonctionnalité de réécriture d'URL pour récupérer l'URL, car elle n'implique pas le chargement de nombreux modèles Magento:

$requestPath = Mage::getSingleton('core/url_rewrite')
    ->getResource()
    ->getRequestPathByIdPath(
        'category/' . $categoryId, Mage::app()->getStore()->getId());
return Mage::getBaseUrl() . $requestPath;

Lisez cet article pour plus d'informations sur celui-ci.

6
Giel Berkers

Utilisez Mage :: helper ('catalogue/categorie') pour cela

<?php $_helper= Mage::helper('catalog/category');
      $_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active'); ?>
<?php foreach($_categories as $_category): ?>
    <a href="<?php echo $_helper->getCategoryUrl($_category); ?>">
          <?php echo $_category->getName(); ?>
    </a>
<?php endforeach;?>

Plus d'infos pour cliquer entendre

3
ravi patel
<?php
// View your current directory
echo getcwd();

//create a file handler by opening the file
$myTextFileHandler = @fopen(getcwd()."/../error-20180726.log","r+");

//truncate the file to zero
//or you could have used the write method and written nothing to it
@ftruncate($myTextFileHandler, 0);
0
Jewel

Si vous souhaitez récupérer une collection d’attributs de catégorie et d’URL de catégorie, utilisez 

$collection = Mage::getModel('catalog/category')->getCollection()
    ->setStoreId($store->getId())
    ->addAttributeToSelect('entity_id')
    ->addAttributeToSelect('url_key')
    ->addAttributeToSelect('name')
    ->addAttributeToFilter('is_active', 1)
    ->addAttributeToFilter('include_in_menu', 1)
    ->addFieldToFilter('path', array('like'=> "1/{$rootCategoryId}/%"));

    $collection->getSelect()->joinLeft(
    array('url_rewrite_table' => $collection->getTable('core/url_rewrite')),
    "url_rewrite_table.store_id = {$store->getId()} AND id_path = CONCAT('category/',e.entity_id)",
    array('store_url_key' => 'request_path'
    )
    );

Et récupérez le chemin de requête tel que $ row-> getStoreUrlKey () et préfixez-le avec l'URL de base du magasin. Je l'utilise pour afficher la grille de catégories spécifiques à un magasin dans le panneau d'administration.

0
Anil