确定页面类型和页面


11

我有一份新工作,现在我每天都要严格从事Magento的工作。我之前没有Magento的经验,所以到目前为止至少可以说是一个挑战!

让我简要解释一下我们正在构建的扩展。

这将允许我们显示一个弹出/模态窗口。模态的HTML内容将被存储在
一个Static Block


管理页面

因此,管理面板由“新标签”下的System/Confuration/新标签组成

通过管理面板,您可以在该新标签页的下拉列表中选择Static Block用于这些部分的默认设置...

HOME PAGEHOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGESHOPPING CART PAGE w/Items in Shopping Cart


默认超车

接下来,实际的CMSCATEGORYPRODUCT页面均允许使用与管理面板页面相同的设置,不同之处在于它们允许您STATIC BLOCK逐项设置a 并覆盖上面管理员设置中的默认设置。


到目前为止,我们已经完成了扩展的管理方面。我们每个部分都有所有管理标签...产品,类别,CMS和配置页面。

下一步将添加到相同的扩展名并Static Block在页面中插入。这Static Block将负责... Static Block根据上述区域中设置的设置,在每个页面上显示正确的内容.....

  • 确定页面我们都在和页面类型(CMS,产品主页,类别)
  • 然后,它将必须读取在上述区域中设置的所有自定义设置。
  • 如果确定我们在Category页面上,则必须获取我们所处的实际特定类别。例如Category 3。然后,我们将查看该特定类别是否有特定设置。如果显示,则Enabled我们将查找Static Block该类别的哪些已保存文件,并将其显示在Static Block页面的主窗口中!
  • 如果Disabled为我们设置了上述“特定类别” ,Modal Window则我们将在“模态”的更全局设置中向上查看,并查看是否为所有类别启用了“模态”。如果是,那么我们将看到Static Block将其显示为所有类别。
  • 除了所有这些之外,它将针对每种主页类型(产品,类别,cms,首页,购物车)执行此过程
  • 我们还必须检查购物车是否为空。如果不为空...那么,当wqe正在检查Static Block要为该页面显示的内容时,我们将必须考虑以上内容,因为每个设置都允许Static Block为空购物车设置a ,为非空购物车设置1!(我知道这是一项艰巨而艰巨的任务,但是我们大部分要做的是管理方面的工作。只需要执行将所有这些因素都考虑在内的部分,即可确定Static Block在哪个页面上显示哪个页面。

因此,为了使我朝正确的方向发展,我有几个较小的问题...

  • 我如何在我的Static Block代码(PHP部分)中确定我所在的页面类型。就像我提到的,我需要知道我是否在...。主页CMS页面类别页面产品页面购物车页面
  • 除了页面类型,我还需要获取实际页面。因此,如果我的产品ID为1234,则需要能够获取该特定页面的设置(该页面的静态块设置)。

我知道这是一个漫长且可能令人困惑的帖子。如果您走到了这一步,则感谢您抽出宝贵的时间阅读此=)

如果您可以协助解决我的问题,那么每一小块都会使我更接近最终目标


以下是我制作的流程图,该流程图说明了我的模块如何确定要插入页面的静态块

在此处输入图片说明


2
您确实意识到您已经有效地重新创建了Mage_Widget模块中存在的功能,对吗?
benmarks

同上@benmarks所说的。IMO,您最好尝试利用小部件并从那里开始。
davidalger

@benmarks看着我添加到我的问题中的流程图,您是否可以说100%仍可实现Mage_Widget?我也需要研究一下
JasonDavis

不能。核心窗口小部件块无法理解图表中指示的组合。您将为此需要一些块逻辑。
benmarks

Answers:


12

除了@benmarks回答的内容外

这是一些代码来检查您提到的某些条件:

// 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
}

检查购物车是否为空或不使用

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

您还询问是否可以检查CMS块的当前页面。
那可能不是一个好方法(您必须包括自定义块,否则将无法在第一页中使用CMS块)。
相反,最好先检查当前页面,然后根据该页面选择要显示的CMS块。

编辑:固定Mage::app()->getRequest()->getFullActionName()Mage::app()->getFrontController()->getAction()->getFullActionName()@Joseph在评论中提到的内容。谢谢!


非常感谢,这将真正帮助我入门!
JasonDavis

1
请注意:Mage::app()->getRequest()->getFullActionName()在购物车模板中使用会导致致命错误,或者至少对我来说是1.7.0.2。$this->getAction()->getFullActionName()工作完美!
Joseph Leedy

恩,是的,您的目标是正确的。我的错!谢谢!
维奈

仅供参考,Mage :: getSingleton('cms / page')-> getId()在controller_action_predispatch事件中提供空值。
MagePsycho 2014年

7

您可以采取许多方法。我建议您通过<default>布局更新句柄添加您的块,这将使其在所有页面上都可用。在块的_prepareLayout()方法中,您可以通过从请求对象($this->getRequest()->getFullActionName())获取当前的完整操作名称,然后使用该名称来确定上下文,从而确定范围。

产品和类别将在注册表中注册。您的模块还可以查看布局更新手柄,其中包括产品ID或类别ID手柄。


3

要检测主页,您需要使用标识符字符串(例如“ home”)来匹配配置值,而不是数字ID:

如果($ page-> getIdentifier()== Mage :: getStoreConfig('web / default / cms_home_page')){
    // 主页
}

以下是一些其他内容:

$ fullActionName =法师:: app()-> getFrontController()-> getAction()-> getFullActionName();
如果('checkout_onepage_index'== $ fullActionName){
    // 查看
}

如果('checkout_onepage_success'== $ fullActionName){
    //结帐成功
}

如果('customer_account_login'== $ fullActionName){
    // 登录
}

if('customer_account_logoutSuccess'== $ fullActionName){
    //登出成功
}

如果('customer_account_create'== $ fullActionName){
    //客户帐户创建
}
如果(0 === strpos($ fullActionName,'catalogsearch_')){
    //搜索
}

如果(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_')
){
    //客户帐户页面(可能还有其他页面)
}

感谢大家提供有用的信息!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.