content management system - tipos - Crear páginas CMS secundarias en Magento
tipos de cms (7)
Tiene razón, no hay jerarquía de páginas CMS en Magento. La mejor solución sería crear una jerarquía real agregando un parent_id a las páginas CMS y modificando el módulo CMS para manejar las URL anidadas y las migas de pan. Pero eso requiere mucha codificación.
Un truco rápido y sucio es modificar las rutas de navegación manualmente en cada subpágina añadiendo algo como esto al XML de actualización del diseño:
<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>
Me gustaría crear un conjunto subordinado de páginas CMS en Magento para que la navegación en la parte superior de la página tenga el siguiente aspecto:
Home > Parent CMS Page > Child CMS Page
Aunque puedo especificar una relación jerárquica con el campo de URL key
, parece ser que todas las páginas de CMS en Magento se enumeran en el directorio raíz de forma predeterminada:
Home > Child CMS Page
¿Algunas ideas?
Para empresas (versión 1.12) use este código en el siguiente archivo, la ubicación es: default-> template-> page-> 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; ?>
Gracias,
Kashif
Para Magento Enterprise, he creado una extensión para resolver esto. Utiliza la jerarquía CMS incorporada en el back-end. El módulo se llama Demac / BananaBread y no debe requerir ningún hack o personalización.
Descarga directa: aquí
Enlace al artículo: http://www.demacmedia.com/magento-commerce/introducing-demac_bananabread-adding-cms-breadcrumbs-from-the-hierarchy-in-magento/
Esta es mi solución al problema. Utilizo el diseño personalizado para la mayoría de las páginas de CMS (predeterminado / plantilla / página / cmsLayout.phtml) así que he agregado el siguiente código en el archivo de diseño:
<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>
actualización -oops- esto podría ser solo una característica de la empresa
Hay una opción incorporada de jerarquía de página CMS en Magento.
Encenderlo:
Sistema> Configuración> General> Gestión de contenido> Jerarquía de página CMS - ver aquí
Para organizar el árbol de jerarquía:
CMS> Páginas> Gestionar jerarquía
Para administrar la posición de una página en el árbol, después de guardar una página, vaya a su "pestaña de jerarquía" - vea la captura de pantalla:
En el ejemplo, la página "Nuestra cultura" es hija de "trabajos" y no del directorio raíz
Tuve el mismo problema con las migas de pan y las páginas cms hace unos días, marque aquí ->
Al igual que en la publicación de Anders Rasmussen, edité cada página de cms manualmente
En breadcrumbs.phtml agregué una pequeña condición para definir si una página es una página CMS (gracias a Alan Storm) y eliminar migajas estándar y agregar nuevas migas a través de xmllayout.
<?php
if($this->getRequest()->getModuleName() == ''cms''){
unset($crumbs[''cms_page'']);
}
?>
xml:
<reference name="breadcrumbs">
<action method="addCrumb">
<crumbName>cms_page_1st_child</crumbName>
<crumbInfo><label>1st child</label><title>1st child</title><link>/1st child/</link></crumbInfo>
</action>
<action method="addCrumb">
<crumbName>cms_page_2nd_child</crumbName>
<crumbInfo><label>2nd child</label><title>2nd child</title></crumbInfo>
</action>
</reference>
Espero que eso ayude, Rito
Construí un bloque personalizado para generar las migas (eliminando el incorporado y reemplazándolo con el personalizado a continuación en el diseño):
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] : [];
}
Luego usó una plantilla .phtml ligeramente modificada para mostrarlos:
<?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; ?>
Funcionando bien para mí en 2.1