Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Content management system 在Magento中创建子CMS页面_Content Management System_Magento - Fatal编程技术网

Content management system 在Magento中创建子CMS页面

Content management system 在Magento中创建子CMS页面,content-management-system,magento,Content Management System,Magento,我想在Magento中创建一组CMS页面,以便页面顶部的面包屑导航如下所示: Home>父CMS页面>子CMS页面 尽管我可以指定与URL键字段的层次关系,但默认情况下,Magento中的所有CMS页面都列在根目录中: Home>子CMS页面 有什么想法吗?你说得对,Magento中没有CMS页面的层次结构。最好的解决方案是创建一个真正的层次结构,向CMS页面添加一个父id,并修改CMS模块以处理嵌套的URL和面包屑。但这需要大量的编码 一种快速而肮脏的方法是在布局更新XML中添加如下内容,手动

我想在Magento中创建一组CMS页面,以便页面顶部的面包屑导航如下所示:

Home>父CMS页面>子CMS页面

尽管我可以指定与
URL键
字段的层次关系,但默认情况下,Magento中的所有CMS页面都列在根目录中:

Home>子CMS页面


有什么想法吗?

你说得对,Magento中没有CMS页面的层次结构。最好的解决方案是创建一个真正的层次结构,向CMS页面添加一个父id,并修改CMS模块以处理嵌套的URL和面包屑。但这需要大量的编码

一种快速而肮脏的方法是在布局更新XML中添加如下内容,手动修改每个子页面上的面包屑:

<reference name="root">
<action method="unsetChild"><alias>breadcrumbs</alias></action>
<block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs">
    <action method="addCrumb">
        <crumbName>home</crumbName>
        <crumbInfo><label>Home page</label><title>Home page</title><link>/</link></crumbInfo>
    </action>
    <action method="addCrumb">
        <crumbName>myparentpage</crumbName>
        <crumbInfo><label>My Parent Page</label><title>My Parent Page</title><link>/myparentpage/</link></crumbInfo>
    </action>
    <action method="addCrumb">
        <crumbName>mysubpage</crumbName>
        <crumbInfo><label>My Sub Page</label><title>My Sub Page</title></crumbInfo>
    </action>
</block>
</reference>

面包屑
家
主页主页/
myparentpage
我的父页面我的父页面/myparentpage/
我的主页
我的子页面我的子页面

几天前,我在面包屑和cms页面上遇到了同样的问题

与Anders Rasmussen post类似,我手动编辑了每个cms页面

在breadcrumbs.phtml中,我添加了一个小条件来定义一个页面是否是CMS页面(多亏了Alan Storm),并删除了标准碎屑,并通过xmllayout添加了新碎屑

<?php
        if($this->getRequest()->getModuleName() == 'cms'){
            unset($crumbs['cms_page']);
        }
?>

xml:


cms\u页面\u第一个\u子项
第一个孩子第一个孩子/第一个孩子/
cms\u第2页\u子项
第二个孩子第二个孩子
希望有帮助, Rito

对于企业版(1.12版),请在以下文件中使用此代码,位置为: 默认->模板->页面->html->breadcrumb.phtml

<?php
$cms_id = Mage::getSingleton('cms/page')->getPageId();
if($cms_id):

    if($_SERVER['REQUEST_URI']) {
        $trim_data  =   substr($_SERVER['REQUEST_URI'],1); 
        $data   =   explode('/',$trim_data);        
    }
    $cms_collection =   array();
    $url_full   =   '';
    $cms_enterprise =   '';

    foreach($data as $identifier)   {
        $page_data  =   Mage::getModel('cms/page')->getCollection()
                        ->addFieldToFilter('identifier', $identifier);          
        if($page_data)  {
            foreach($page_data as $single)  {
                if($single->getContentHeading() != null)    {                       
                    if($single->getPageId())    {
                        $cms_enterprise = Mage::getModel('enterprise_cms/hierarchy_node')->getCollection()
                                                ->addFieldToFilter('page_id', $single->getPageId());    
                        foreach($cms_enterprise as $single_enterprise)  {
                            $url_full   =   $single_enterprise->getRequestUrl();
                        }                       
                    }
                    $cms_collection[]   =   array($single->getTitle(), $single->getContentHeading(), $url_full );
                }   else    {                                   
                    if($single->getPageId())    {
                        $cms_enterprise = Mage::getModel('enterprise_cms/hierarchy_node')->getCollection()
                                                ->addFieldToFilter('page_id', $single->getPageId());    
                        foreach($cms_enterprise as $single_enterprise)  {
                            $url_full   =   $single_enterprise->getRequestUrl();
                        }                       
                    }
                    $cms_collection[]   =   array($single->getTitle(), $single->getTitle(), $url_full );
                }                   
            }       
        }
    }
    $count  =   count($cms_collection);
    $i  =   1;  
?>

    <?php   if(count($cms_collection)): ?>
    <div class="breadcrumbs">
        <ul>
            <li>
                <a href="<?php echo $this->getUrl() /*Home*/ ?>" title="<?php echo $this->__('Home'); /*Home Title*/ ?>">
                    <?php   echo $this->__('Home'); /*Home Name*/ ?>
                </a>    
                 <span>> </span>
            </li>   
            <?php foreach($cms_collection as $key=>$value): ?>                      
                <?php   if($i == $count):   ?>
                    <li>
                        <strong>
                                <?php   echo $value[1]; /*Name*/ ?>
                        </strong>   
                    </li>           
                <?php else: ?>  
                    <li>
                        <a href="<?php echo $this->getUrl().$value[2] /*Identifier*/ ?>" title="<?php echo $value[0] /*Title*/ ?>">
                            <?php   echo $value[1]; /*Name*/ ?>
                        </a>    
                         <span>> </span>
                    </li>           
                <?php endif; ?>
                <?php   $i++;   ?>
            <?php endforeach; ?>
        </ul>
    </div>
    <?php endif; ?>

<?php else: ?>
    <?php if($crumbs && is_array($crumbs)): ?>
    <div class="breadcrumbs">
        <ul>
            <?php foreach($crumbs as $_crumbName=>$_crumbInfo): ?>
                <li class="<?php echo $_crumbName ?>">
                <?php if($_crumbInfo['link']): ?>
                    <a href="<?php echo $_crumbInfo['link'] ?>" title="<?php echo $this->htmlEscape($_crumbInfo['title']) ?>"><?php echo $this->htmlEscape($_crumbInfo['label']) ?></a>
                <?php elseif($_crumbInfo['last']): ?>
                    <strong><?php echo $this->htmlEscape($_crumbInfo['label']) ?></strong>
                <?php else: ?>
                    <?php echo $this->htmlEscape($_crumbInfo['label']) ?>
                <?php endif; ?>
                <?php if(!$_crumbInfo['last']): ?>
                    <span>> </span>
                <?php endif; ?>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
    <?php endif; ?>

  • >
  • >

    对于Magento Enterprise,我创建了一个扩展来解决这个问题。它在后端使用内置的CMS层次结构。该模块称为Demac/BananaBread,不需要任何破解或定制

    直接下载:


    文章链接:

    这是我解决问题的方法。我对大多数CMS页面使用自定义布局(default/template/page/cmsLayout.phtml),因此我在布局文件中添加了以下代码:

    <div class="col-main">
        <?php  
            $urlPart=str_replace(Mage::getUrl(),'',Mage::getUrl('', array('_current' => true,'_use_rewrite' => true)));
            $urlPart=explode('/',$urlPart);
            $string='';
            $return='<div class="breadcrumbs"><ul><li class="home"><a href="'.Mage::getBaseUrl().'" title="Go to Home Page">Home</a><span> / </span></li>';
            $count=count($urlPart);
            foreach($urlPart as $value)
            {
              $count--;
              $string.='/'.$value;
              $string=trim($string, '/');
              $pageTitle = Mage::getModel('cms/page')->load($string, 'identifier')->getTitle();
              if($count==0)
                  $return.='<li><strong>'.$pageTitle.'</strong></li>';
              else
                  $return.='<li><a href="'.Mage::getBaseUrl().$string.'" title="'.$pageTitle.'">'.$pageTitle.'</a><span> / </span></li>';
            }  
        echo $return.'</li></ul></div>';
        ?>
        <?php echo $this->getChildHtml('global_messages') ?>
        <?php echo $this->getChildHtml('content') ?>
    </div>
    
    
    
    更新 -oops-这可能只是一个企业功能


    Magento中有一个内置的CMS页面层次结构选项

    要打开它:

    系统>配置>常规>内容管理>CMS页面层次结构-

    组织层次结构树:

    CMS>页面>管理层次结构

    要管理页面在树中的位置,保存页面后,转到其“层次结构选项卡”-参见屏幕截图:


    在该示例中,“我们的文化”页面是“作业”的子页面,而不是根目录的子页面

    我构建了一个自定义块来生成碎屑(删除内置块并替换为布局中下面的自定义块):

    然后使用稍微修改的.phtml模板来显示它们:

    <?php if ($block->crumbs && is_array($block->crumbs)) : ?>
    <div class="breadcrumbs">
        <ul class="items">
            <?php foreach ($block->crumbs as $crumbName => $crumbInfo) : ?>
                <li class="item <?php /* @escapeNotVerified */ echo $crumbName ?>">
                <?php if ($crumbInfo['link']) : ?>
                    <a href="<?php /* @escapeNotVerified */ echo $crumbInfo['link'] ?>" title="<?php echo $block->escapeHtml($crumbInfo['title']) ?>">
                        <?php echo $block->escapeHtml($crumbInfo['label']) ?>
                    </a>
                <?php elseif ($crumbInfo['last']) : ?>
                    <strong><?php echo $block->escapeHtml($crumbInfo['label']) ?></strong>
                <?php else: ?>
                    <?php echo $block->escapeHtml($crumbInfo['label']) ?>
                <?php endif; ?>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
    <?php endif; ?>
    
    
    

      谢谢这正是我所做的,虽然它仍然只是一个手动覆盖,但它工作得完美无缺。我不确定如果你有多个父母和多个孩子,这将如何工作。这会不会在每个页面上输出完全相同的面包屑(不好)?这仅在Magento EE中。您是否必须为此XML文件中的每个CMS页面添加操作?是的,我认为是这样,但由于此答案非常陈旧,它可能会过时。
      namespace Uprated\Theme\Block\Html;
      
      class UpratedBreadcrumbs extends \Magento\Framework\View\Element\Template
      {
      /**
       * Current template name
       *
       * @var string
       */
      public $crumbs;
      protected $_template = 'html/breadcrumbs.phtml';
      protected $_urlInterface;
      protected $_objectManager;
      protected $_repo;
      
      public function __construct(
          \Magento\Backend\Block\Template\Context $context,
          \Magento\Framework\UrlInterface $urlInterface,
          \Magento\Framework\ObjectManagerInterface $objectManager,
          array $data = [])
      {
          $this->_urlInterface = $urlInterface;
          $this->_objectManager = $objectManager;
          $this->_repo = $this->_objectManager->get('Magento\Cms\Model\PageRepository');
          $this->getCrumbs();
      
          parent::__construct($context, $data);
      }
      
      public function getCrumbs() {
          $baseUrl = $this->_urlInterface->getBaseUrl();
          $fullUrl =  $this->_urlInterface->getCurrentUrl();
          $urlPart = explode('/', str_replace($baseUrl, '', trim($fullUrl, '/')));
      
          //Add in the homepage
          $this->crumbs = [
              'home' => [
                  'link' => $baseUrl,
                  'title' => 'Go to Home Page',
                  'label' => 'Home',
                  'last' => ($baseUrl == $fullUrl)
              ]
          ];
      
          $path = '';
          $numParts = count($urlPart);
          $partNum = 1;
          foreach($urlPart as $value)
          {
              //Set the relative path
              $path = ($path) ? $path . '/' . $value : $value;
      
              //Get the page
              $page = $this->getPageByIdentifier($path);
      
              if($page) {
                  $this->crumbs[$value] = [
                      'link' => ($partNum == $numParts) ? false : $baseUrl . $path,
                      'title' => $page['title'],
                      'label' => $page['title'],
                      'last' => ($partNum == $numParts)
                  ];
              }
              $partNum++;
          }
      }
      
      protected function getPageByIdentifier($identifier) {
          //create the filter
          $filter = $this->_objectManager->create('Magento\Framework\Api\Filter');
          $filter->setData('field','identifier');
          $filter->setData('condition_type','eq');
          $filter->setData('value',$identifier);
      
          //add the filter(s) to a group
          $filter_group = $this->_objectManager->create('Magento\Framework\Api\Search\FilterGroup');
          $filter_group->setData('filters', [$filter]);
      
          //add the group(s) to the search criteria object
          $search_criteria = $this->_objectManager->create('Magento\Framework\Api\SearchCriteriaInterface');
          $search_criteria->setFilterGroups([$filter_group]);
      
          $pages = $this->_repo->getList($search_criteria);
          $pages = ($pages) ?  $pages->getItems() : false;
      
          return ($pages && is_array($pages)) ? $pages[0] : [];
      }
      
      <?php if ($block->crumbs && is_array($block->crumbs)) : ?>
      <div class="breadcrumbs">
          <ul class="items">
              <?php foreach ($block->crumbs as $crumbName => $crumbInfo) : ?>
                  <li class="item <?php /* @escapeNotVerified */ echo $crumbName ?>">
                  <?php if ($crumbInfo['link']) : ?>
                      <a href="<?php /* @escapeNotVerified */ echo $crumbInfo['link'] ?>" title="<?php echo $block->escapeHtml($crumbInfo['title']) ?>">
                          <?php echo $block->escapeHtml($crumbInfo['label']) ?>
                      </a>
                  <?php elseif ($crumbInfo['last']) : ?>
                      <strong><?php echo $block->escapeHtml($crumbInfo['label']) ?></strong>
                  <?php else: ?>
                      <?php echo $block->escapeHtml($crumbInfo['label']) ?>
                  <?php endif; ?>
                  </li>
              <?php endforeach; ?>
          </ul>
      </div>
      <?php endif; ?>