Determinar o tipo de página e a página


11

Tenho um novo emprego, onde trabalho estritamente no Magento todos os dias agora. Eu não tenho experiência anterior com Magento, por isso tem sido um desafio para dizer o mínimo até agora!

Deixe-me explicar brevemente a extensão que estamos construindo.

Isso nos permitirá mostrar uma janela pop-up / modal. O conteúdo HTML do Modal será armazenado em
umStatic Block


PÁGINA DE ADMINISTRAÇÃO

Portanto, o painel do administrador consiste em uma nova guia em System/Confuration/NEW TAB

O painel do administrador permite que você selecione em uma lista suspensa nessa NOVA PÁGINA o padrão Static Blocka ser usado para essas seções ...

HOME PAGEou HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESou ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESou ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESou ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEou SHOPPING CART PAGE w/Items in Shopping Cart


SOBRECARGA PADRÃO

Em seguida, as páginas reais CMS , CATEGORY e PRODUCT permitem as mesmas configurações que a página do Painel do administrador, exceto que permitem definir STATIC BLOCKuma por item e substituir a configuração padrão que tínhamos nas configurações de administrador acima .


Até agora, temos o lado do administrador da extensão concluído. Temos todas as guias de administração de cada seção ... produto, categoria, CMS e página de configuração.

O próximo passo será adicionar a mesma extensão e Static Blockinserir na página. Isso Static Blockserá responsável por ... Mostrar o correto Static Blockem cada página com base nas configurações definidas nas áreas mencionadas acima .....

  • Determinando a página em que estamos e o tipo de página (cms, produto, página inicial, categoria)
  • Em seguida, ele terá que ler todas as configurações personalizadas definidas nas áreas mencionadas acima.
  • Se for determinado que estamos em uma Categorypágina, teremos que obter a categoria específica específica em que estamos. Por exemplo Category 3. Veremos então se há uma configuração específica para essa categoria específica. Se estiver escrito Enabled, procuraremos o que Static Blockestá salvo para essa categoria e o mostraremos em nossa Static Blockpágina principal !
  • Se a categoria específica acima estiver definida como Disableda nossa Modal Window, procuraremos mais nas configurações globais do Modal e veremos se um Modal está ativado para todas as categorias. Se sim, veremos o que Static Blockestá definido para ser mostrado para todas as categorias.
  • Além de tudo isso, ele fará esse processo para cada um dos tipos de página principal (produto, categorias, cms, home, carrinho)
  • Também teremos que verificar se o carrinho de compras está vazio ou não. SE não estiver vazio ... teremos que levar isso em consideração acima quando estivermos verificando o que Static Blockmostrar para essa página, pois cada configuração permite que um Static Blockseja definido para o carrinho vazio e 1 para o carrinho não vazio! (Eu sei que essa é uma tarefa enorme e difícil, mas temos o lado do administrador feito principalmente. Só precisamos fazer a parte que leva tudo isso em consideração na determinação de qual Static Blockexibição em qual página específica.

Então, para me colocar na direção certa, tenho algumas perguntas menores ...

  • Como posso dentro do meu Static Blockcódigo (a parte PHP) determinar em qual TIPO de PAGE estou. Como mencionei, preciso saber se estou em ... PÁGINA INICIAL , PÁGINA CMS , PÁGINA DE CATEGORIA , PÁGINA DE PRODUTO ou PÁGINA DE CARRINHO DE COMPRAS ?
  • Além do TIPO DE PÁGINA , preciso obter a página real. Portanto, se eu estiver na identificação do produto 1234 , preciso obter a configuração (bloco estático definido para essa página) para essa página específica.

Eu sei que este foi um post longo e possivelmente confuso. Se você chegou até aqui, obrigado por dedicar um tempo para ler isso =)

Se você puder ajudar com minha pergunta, cada pedacinho me aproximará do objetivo final


Abaixo está um fluxograma que eu fiz de como meu módulo precisará trabalhar para determinar qual bloco estático inserir na página

insira a descrição da imagem aqui


2
Você percebe que recriou efetivamente a funcionalidade que existe no Mage_Widgetmódulo, certo?
benmarks 11/07/2013

O mesmo diz o @benmarks. Na IMO, será melhor tentar tirar proveito dos widgets e partir daí.
Davidalger

@benmarks Olhando para o fluxograma que adicionei à minha pergunta, você diria que ainda é possível atingir 100% com o Mage_Widget? Eu preciso olhar para isso também
JasonDavis

Não. Os blocos de widget principais não compreendem combinações como as indicadas no seu gráfico. Você vai querer alguma lógica de bloco para isso.
benmarks

Respostas:


12

Além do que o @benmarks respondeu :

Aqui está um pequeno código para verificar algumas das condições que você mencionou:

// Check if it's a CMS page:
$page = Mage::getSingleton('cms/page');
if ($page->getId()) {
    // The current page is a CMS page

    if ($page->getIdentifier() == Mage::getStoreConfig('web/default/cms_home_page')) {
        // The current page is the CMS home page
    }
}

$product = Mage::registry('current_product');
$category = Mage::registry('current_category');
if ($product && $product->getId()) {
    // The current page is a product page.
    // If you only want the main product detail page, also check for 
    // Mage::app()->getFrontController()->getAction()->getFullActionName() == 'catalog_product_view'
    // Be aware that a current_product and a current_category can be set at the same time.
    // In that case the visitor is viewing a product in a category.
} elseif ($category && $category->getId()) {
    // The current page is a category page
    // If you only want the category list page, also check for 
    // Mage::app()->getFrontController()->getAction()->getFullActionName() == 'catalog_category_view'
}

// Check for cart page
if (Mage::app()->getFrontController()->getAction()->getFullActionName() == 'checkout_cart_index') {
    // The current page is the cart
}

Para verificar se o carrinho está vazio ou não, use

$isEmpty = Mage::getSingleton('checkout/session')->getQuote()->getItemsCount() > 0

Você também perguntou se pode verificar a página atual dentro de um bloco CMS.
Essa provavelmente não é uma boa abordagem (você teria que incluir blocos personalizados, o que anularia o propósito de usar blocos CMS na primeira página).
Em vez disso, é melhor verificar a página atual primeiro e depois escolher o bloco CMS a ser exibido com base nisso.

EDIT : corrigido Mage::app()->getRequest()->getFullActionName()para ser Mage::app()->getFrontController()->getAction()->getFullActionName()como mencionado por Joseph nos comentários. Obrigado!


Muito obrigado, isso vai realmente ajudar a começar!
21413 JasonDavis

1
Apenas para observar: o uso Mage::app()->getRequest()->getFullActionName()em um modelo de carrinho resulta em um erro fatal ou pelo menos ocorreu para mim no 1.7.0.2. $this->getAction()->getFullActionName()funcionou perfeitamente!
Joseph Leedy

Sim, você está no caminho certo. Foi mal! Obrigado!
Vinai

FYI, Mage :: getSingleton ('cms / page') -> getId () fornece valor nulo no evento controller_action_predispatch.
MagePsycho

7

Muitas abordagens que você pode adotar. Eu recomendo adicionar seu bloco através do <default>identificador de atualização de layout, que o tornaria disponível em todas as páginas. No _prepareLayout()método do seu bloco , você pode determinar o escopo obtendo o nome da ação completa atual do objeto request ( $this->getRequest()->getFullActionName()) e usando-o para determinar o contexto.

Os produtos e categorias serão registrados no registro. Seu bloco também pode examinar os identificadores de atualização de layout, que incluirão identificadores de ID do produto ou de categoria.


3

Para detectar a página inicial, você precisa usar a sequência identificadora (por exemplo, "página inicial") para corresponder ao valor de configuração, em vez do ID numérico:

if ($ page-> getIdentifier () == Mage :: getStoreConfig ('web / padrão / cms_home_page')) {
    // Pagina inicial
}

Aqui estão alguns outros:

$ fullActionName = Mago :: app () -> getFrontController () -> getAction () -> getFullActionName ();
if ('checkout_onepage_index' == $ fullActionName) {
    // Verificação de saída
}

if ('checkout_onepage_success' == $ fullActionName) {
    // Sucesso no checkout
}

if ('customer_account_login' == $ fullActionName) {
    // Conecte-se
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Logout success
}

if ('customer_account_create' == $ fullActionName) {
    // Criar conta do cliente
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // Pesquisa
}

if (0 === strpos ($ fullActionName, 'customer_account_')
 || 0 === strpos ($ fullActionName, 'customer_address_')
 || 0 === strpos ($ fullActionName, 'wishlist_')
 || 0 === strpos ($ fullActionName, 'newsletter_manage_')
 || 0 === strpos ($ fullActionName, 'review_customer_')
 || 0 === strpos ($ fullActionName, 'sales_order_')
) {
    // Página da conta do cliente (provavelmente existem outras)
}

Obrigado pela informação útil a todos!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.