【问题标题】:How to add jquery readmore function (expand/collapse) to magento CMS pages如何将 jquery readmore 功能(展开/折叠)添加到 magento CMS 页面
【发布时间】:2014-09-12 15:02:30
【问题描述】:

我的 Magento CMS 页面中需要一个阅读更多按钮链接。

我收到了一些长长的 cms 文本。我需要一个阅读更多链接来折叠它们。

阅读更多链接必须始终位于第一段或超过 250 个字符或任何其他限制之后。但是,当我可以通过添加某种短代码将链接自己放置在 magento 后端时会更好。像 [阅读更多] 什么的。没关系。

这是我尝试做的一个例子。 http://www.feestding.nl/themakleding/beste-thema-s/halloween-kostuums/

功能示例 http://jedfoster.com/Readmore.js/

我该怎么做?

【问题讨论】:

    标签: javascript php jquery html magento


    【解决方案1】:

    下载 readmore.js 并将其添加到模板的 page.xml 中。确保你的路径是正确的,并且你已经使用了正确的 jquery,如果没有,那么也链接 jquery 文件。

        <action method="addJs"><script>readmore.js</script></action>
    

    在后端,始终将您的内容放在具有特定类的 div 中,如下所示,以显示阅读更多链接

        <div class="readmore">.......</div>
    

    根据您希望阅读更多内容在 cms 页面、类别页面或产品页面中显示的位置,您必须在这些页面中相应地添加以下阅读更多脚本。您还可以从后端的编辑器将脚本添加到您的 CMS 页面中。

        <script type="text/javascript">
             jQuery('.readmore').readmore({maxHeight:40});  
        </script>
    

    我们可以在 readmore.js 中使用几个选项,请遵循文档here

    当心 jQuery 冲突,您可能需要使用 noConflict() 来使这个 readmore 脚本工作。 希望你能完成这项工作。

    【讨论】:

      【解决方案2】:

      您可以通过实现自定义扩展来实现此功能。我将向您展示我们需要采取的步骤来实现这一目标。所以我们的扩展应该有一个名字Programmerrkt_AdvancedCms

      第一步是激活我们的模块。为此,将此文件添加到 etc/modules 中

      位置:app/etc/modules/Programmerrkt_AdvancedCms.xml

      <config>
          <modules>
              <Programmerrkt_AdvancedCms>
                  <active>true</active>
                  <codePool>local</codePool>
              </Programmerrkt_AdvancedCms>
          </modules>
      </config>
      

      下一步是定义我们模块的配置。让我们这样做吧。

      位置:app/code/local/Programmerrkt/AdvancedCms/etc/config.xml

      <config> 
          <modules>
              <Programmerrkt_AdvancedCms>
                  <version>1.0.0</version>
              </Programmerrkt_AdvancedCms>
          </modules>
          <frontend>
              <layout>
                  <updates>
                      <programmerrkt_advancedcms>
                          <file>programmerrkt_advancedcms.xml</file>
                      </programmerrkt_advancedcms>
                  </updates>
              </layout>
          </frontend>
      </config>
      

      这个文件告诉 Magento 我们的模块有一个前端部分的布局文件。而已。我们的布局文件是我们模块的核心。它将包含我们模块的重要部分。让我们定义我们的布局文件。

      位置:app/design/frontend/&lt;your_package&gt;/&lt;your_theme&gt;/layout/programmerrkt_advancedcms.xml

      <layout>
          <cms_page>
              <reference name="head">
                  <action method="addItem">
                      <type>skin_css</type>
                      <name>css/customcss/readmore.css</name>
                  </action>
                  <action method="addItem">
                      <type>skin_js</type>
                      <name>js/jquery1.js</name>
                  </action>
                  <action method="addItem">
                      <type>skin_js</type>
                      <name>js/customjs/readmore.js</name>
                  </action>
              </reference>
              <reference name="before_body_end">
                  <block type="core/template" name="readmore.script.template" template="programmerrkt/advancedcms/readmore/script.phtml" />
              </reference>
          </cms_page>
      </layout>
      

      所以我们在这里为cms_page 处理程序定义了布局。每当请求 CMS 页面时,Magento 都会查找此布局处理程序。所以这个处理程序对我们来说是一个完美的处理程序。接下来我们在标题部分添加了 jquery 和 readmore.js。最后我们定义了一个模板文件script.phtml 来保存我们的自定义javascript代码。请注意,我们将此模板包含在页面底部。这将确保我们的自定义代码将被完美地调用。

      现在我们的 script.phtml 应该如下所示。

      位置:app/design/frontend/&lt;yourpackag&gt;/&lt;your_theme&gt;/template/programmerrkt/advancedcms/readmore/script.phtml

      <script type="text/javascript">
      //<![CDATA[
      $j('#readomore-demo').readmore({
          moreLink: '<a href="#">More examples and options</a>',
          maxHeight: 100,
          afterToggle: function(trigger, element, expanded) {
            if(! expanded) { // The "Close" link was clicked
              $j('html, body').animate( { scrollTop: element.offset().top }, {duration: 100 } );
            }
          }
        });
      //]]>
      </script>
      

      如您所见,readmore() 方法在 ID 为 readomore-demo 的元素上调用。因此,您需要将您的 cms 页面的所有内容都包含在此 id 中。演示在这里显示。

      我们完成了。我们的输出将如下所示。

      所以你唯一需要改变的就是根据你的需要编辑script.phtml文件。

      注意:请记住,您需要添加 jquery 才能使该模块正常工作。如果您安装了 jquery,则删除在布局文件中添加 jquery 的代码。您还需要下载readmore.js 并且必须将其包含在skin/frontend/&lt;your_package/&lt;your_theme&gt;/js/customjs/readmore.js 中。同样在skin/frontend/&lt;your_package/&lt;your_theme&gt;/css/customcss/readmore.css中添加css文件。您可以使用这个 css 文件来装饰出现在您的 cms 页面中的链接。

      补充说明:readmore.js 要求 jquery 大于 1.7.0

      希望对您有所帮助。

      【讨论】:

      • 它看起来很棒但是我尝试了很多次但没有成功。你确定代码是正确的吗?有一些拼写错误,但即使我纠正了它们也没有用。也许它与另一个 javascipt 冲突。或者我做错了什么。不知道...
      • 我已经检查过了。它应该可以工作。检查 jquery,readmore.js 包含在页面中。通过 system->config 检查模块是否启用。还要检查 jquery 冲突(重要)
      • 好问题。打开你的jquery文件,在最底部,你需要添加var $j = jQuery.noConflict()。而已。它将避免jquery冲突。我在script.phtml 中使用了这个$j 变量。请看一下那个文件。如果你没有在 jquery 中添加这一行,那么上面的代码将不起作用。对不起。忘记说了
      猜你喜欢
      • 2012-08-31
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多