web-dev-qa-db-ja.com

MagentoでカテゴリURLキーを取得する

MagentoでカテゴリのURLキーを取得するにはどうすればよいですか。 CMSのURLキーフィールドにこのテキストを追加しました。

Category-1

これは、現在、アンカーにカテゴリURLを表示しようとしている方法です。

$_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; ?>

しかし、出力を確認するたびに、次のように表示されます。

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

これについてはすでにグーグルとmagentoのフォーラムをチェックしましたが、まだ十分な答えが見つかりません。

また、アンカーでURLキーを呼び出しようとしているのですか、それとも別のURLですか?

9
marchemike

他の両方の答えは、DBペナルティがあります。カテゴリURL情報を追加する最良の方法は、コレクションレベルで、テンプレートファイルで好みに応じて使用することです。次のようにコードを調整します。

_    $_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; ?>
_

addUrlRewriteToResult()と呼ばれるカテゴリコレクションに適用される追加メソッドに注意してください。また、以前にgetUrl()であったものの代わりにgetCategoryUrl()を使用してURLを呼び出します。コード内)。

ちなみに、getUrl()を呼び出すとコードは正常に動作するはずですが、パフォーマンスにわずかに影響します。

これがお役に立てば幸いです。

17
Ron

たぶん私は質問を完全に理解していなかったかもしれませんが、以下のコードはあなたにIDが与えられたカテゴリのURLを与えます

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

Load()内のid 4を必要なものに変更するだけです

16
ThanosDi

Magento(Category-)モデルを使用すると、カテゴリのURLをロードするためだけにロードするのが非常に重くなる場合があります。 9000以上のカテゴリURLのURLをロードする必要があるループにいる場合、多数のMagentoモデルをロードする必要がないため、URL書き換え機能を使用してURLをフェッチすることを検討できます。

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

これについての詳細は この記事 を読んでください。

6
Giel Berkers

これにはMage :: helper( 'catalog/category')を使用します

<?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;?>

クリックする詳細情報 聞く

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

店舗ごとのカテゴリ属性とカテゴリurlのコレクションを取得する場合は、次を使用できます。

$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'
    )
    );

そして、$ row-> getStoreUrlKey()のようなリクエストパスを取得し、ストアベースUrlをプレフィックスとして付けます。これを使用して、管理パネルにストア固有のカテゴリグリッドを表示しています。

0
Anil