app/template/osechi/Block/news.twig line 1

Open in your IDE?
  1. {#
  2. ///////////////////////////////////////////////////////////////////////
  3. This template is part of EC-CUBE Design template.
  4. Copyright(c) JAPAN ELECTRONIC INDUSTRIAL ARTS CO.LTD.
  5. http://www.jeia.co.jp/
  6. For the full copyright and license information, please view the LICENSE
  7. file that was distributed with this source code.
  8. 本テンプレートの著作権は、「株式会社日本電子工藝社」に帰属いたします。
  9. ※本テンプレートを譲渡・再頒布・転用・第三者へ開示することは禁止いたします。
  10. ただし、事業者によるショップ運営者への設置代行を禁止するものではございません。
  11. ※本テンプレートを申請されたご利用サイトへの設置以外の目的で複製することは禁止いたします。
  12. ※本テンプレートデータ内のライセンス条項、および著作権に関する記述を削除することはできません。
  13. ※ご利用サイトを変更することはできません。申請と異なるサイトにてご利用になる場合は、
  14. 別途、ご利用費用をお支払いただく必要がございます。
  15. ※本テンプレートの改変にあたり、一切のサポートはいたしかねます。
  16. ※本テンプレートは、すべての設置環境で動作する事は保証しておりません。
  17. ///////////////////////////////////////////////////////////////////////
  18. #}
  19. {#
  20. 新着情報
  21. サムネイル画像を表示できる新着情報ブロックとなります。クリックにより詳細本文をポップアップ表示します。
  22. 記事の登録はEC-CUBE標準機能です。管理機能の「コンテンツ管理 > 新着情報管理」から記事を登録・編集してください。
  23. EC-CUBE標準では新着情報のサムネイル画像登録機能はありませんが当テンプレートでは新着情報の「詳細本文」欄の中に
  24. 以下のコード(img要素)を記述して頂くことでそれを拾ってサムネイル画像表示させています。
  25. サムネイル画像を登録する記述
  26. 例:
  27. <img class="news_thumbnail" src="/html/template/dtJEIA4010/assets/img/sample/news_thumbnail_01.jpg" alt="">
  28. ※サムネイル画像の指定は、詳細本文欄のどこに記述して頂いても構いません。
  29. ※src属性には画像までのフルパスを記述してください。
  30. ※詳細本文の表示の中ではサムネイル画像は表示されません。
  31. 新着情報一覧の表示件数は下記のTwig変数「NewsListMax」にて設定して頂けます。
  32. 一覧表示はスライド表示します。
  33. 新着情報をクリックすることで詳細本文をポップアップ表示します。​
  34. 詳細本文もスライダーとなっており、ポップアップした中でスライド表示させることができます。
  35. #}
  36. {# ----------▼ 新着情報の表示件数 ▼---------- #}
  37. {% set NewsListMax = 10 %}
  38. {# ----------▲ 新着情報の表示件数 ▲---------- #}
  39. <!-- Block/news.twig -->
  40. {% set NewsList = repository('Eccube\\Entity\\News').getList() %}
  41. {# 新着情報一覧 #}
  42. <!--
  43. <div class="ec-newsRole">
  44.     <div class="ec-secHeading">
  45.         <h2 class="text-span updown ec-secHeading__en">
  46.             News
  47. {#
  48.             <span class="ec-secHeading__ja">新着情報</span>
  49. #}
  50.         </h2>
  51.     </div>
  52.     <div class="ec-newsRole__list appearEffect">
  53.         {# slickコンテナ #}
  54.         <div class="ec-slickContainer slickGutter">
  55.             {# 新着情報アイテム #}
  56. {% for News in NewsList %}
  57.     {% if loop.index0 < NewsListMax %}{# 10件までを表示 #}
  58.             <div class="ec-newsItemRole" data-index="{{ loop.index0 }}">
  59.                 {# サムネイル画像枠 #}
  60.                 <div class="ec-newsItemRole__thumbnail"></div>
  61.                 {# 商品コンテンツ枠 #}
  62.                 <div class="ec-newsItemRole__content">
  63.                     {# 新着情報タイトル #}
  64.                     <div class="ec-newsItemRole__title">{{ News.title }}</div>
  65.                     {# 投稿日付 #}
  66.                     <time class="ec-newsItemRole__date">{{ News.publish_date|date('Y/m/d') }}</time>
  67.                 </div>
  68.                 {# 詳細本文(こちらはjsがサムネイル情報を取得するために使用しますので、本文自体は非表示とします) #}
  69.         {% if News.description %}
  70.                 <div class="ec-newsItemRole__description" style="display:none;">
  71.                     {{ News.description|raw|nl2br }}
  72.                 </div>
  73.         {% endif %}
  74.             </div>
  75.     {% endif %}
  76. {% endfor %}
  77.         </div>
  78.     </div>
  79. </div>
  80. -->
  81. {# 詳細本文ポップアップスライダー #}
  82. <div class="ec-newsDetailRole">
  83.     <div class="ec-newsDetailRole__list">
  84.         {# slickコンテナ #}
  85.         <div class="ec-slickContainer">
  86.             {# 新着情報アイテム #}
  87. {% for News in NewsList %}
  88.     {% if loop.index0 < NewsListMax %}{# 10件までを表示 #}
  89.             <div class="ec-newsItemRole">
  90.                 {# 新着情報タイトル #}
  91.                 <div class="ec-newsItemRole__title">{{ News.title }}</div>
  92.                 {# 投稿日付 #}
  93.                 <time class="ec-newsItemRole__date">{{ News.publish_date|date('Y/m/d') }}</time>
  94.                 {# 詳細本文 #}
  95.                 <div class="ec-newsItemRole__description">
  96.         {% if News.description %}
  97.                     {{ News.description|raw|nl2br }}
  98.             {% if News.url %}
  99.                     <br><a href="{{ News.url }}" {% if News.link_method == '1' %}target="_blank"{% endif %}>{{ '詳しくはこちら'|trans }}</a>
  100.             {% endif %}
  101.         {% else %}
  102.                     (詳細本文はありません)
  103.         {% endif %}
  104.                 </div>
  105.             </div>
  106.     {% endif %}
  107. {% endfor %}
  108.         </div>
  109.     </div>
  110. </div>
  111. <script>
  112.     $(function () {
  113.         var $newsRole =        $( '.ec-newsRole' );
  114.         var $newsDetailRole =  $( '.ec-newsDetailRole' );
  115.         var $newsSlick =       $newsRole.find('.ec-slickContainer');
  116.         var $newsDetailSlick = $newsDetailRole.find('.ec-slickContainer');
  117.         // 各記事ごとに、詳細本文からサムネイル情報を取得してしかるべき場所へappendします
  118.         $newsRole.find( '.ec-newsItemRole' ).each(function(){
  119.             var $this = $(this);
  120.             // サムネイル画像配置要素
  121.             var $newsThumbnail = $this.find( '.ec-newsItemRole__thumbnail' );
  122.             // サムネイル画像要素を取得
  123.             var $thumbnailImage = $this.find( '.ec-newsItemRole__description .news_thumbnail' );
  124.             if ( !$thumbnailImage.length ) {
  125.                 // サムネイル画像の指定がない場合はnone画像
  126.                 $thumbnailImage = '<img src="/html/template/dtJEIA4010/assets/img/sample/news_thumbnail_none.jpg" alt="">';
  127.             }
  128.             // サムネイル画像要素を配置要素へappend
  129.             $newsThumbnail.append( $thumbnailImage );
  130.         });
  131.         // 新着情報一覧のslickスライダー実装
  132.         $newsSlick.slick({
  133.             dots:          false,
  134.             arrows:        true,
  135.             prevArrow:     '<div class="slick-prev"><i class="jeiafont jeia-arrow-left"></i></div>',
  136.             nextArrow:     '<div class="slick-next"><i class="jeiafont jeia-arrow"></i></div>',
  137.             speed:         600,
  138.             slidesToShow:  4,
  139.             swipeToSlide:  true,// slidesToScrollに関係なく、ユーザーがスライドに直接ドラッグまたはスワイプすることを許可
  140.             responsive:    [
  141.                 {
  142.                     breakpoint: 1280,// 1280px未満(タブレット時)
  143.                     settings: {
  144.                         slidesToShow: 3// 3個で収まらない場合は2個に減らしてご調整ください
  145.                     }
  146.                 },
  147.                 {
  148.                     breakpoint: 768,// 768px未満(スマホ時)
  149.                     settings: {
  150.                         slidesToShow: 2
  151.                     }
  152.                 }
  153.             ]
  154.         });
  155.         // 詳細本文一覧のslickスライダー実装
  156.         $newsDetailSlick.slick({
  157.             fade:          true,
  158.             dots:          false,
  159.             arrows:        true,
  160.             prevArrow:     '<div class="slick-prev"><i class="jeiafont jeia-arrow-left"></i></div>',
  161.             nextArrow:     '<div class="slick-next"><i class="jeiafont jeia-arrow"></i></div>',
  162.             adaptiveHeight: true,
  163.             speed:         300
  164.         });
  165.         // 新着情報アイテムのクリックで詳細本文をポップアップ表示
  166.         $newsRole.on('click', '.ec-newsItemRole', function(){
  167.             // 詳細本文スライダーをクリックされたアイテムに合わせるためslickGoToします
  168.             var index = $(this).data('index');
  169.             $newsDetailSlick.slick('slickGoTo', index, true);
  170.             // ポップアップ表示開始
  171.             $newsDetailRole.addClass( 'is-active' );
  172.         });
  173.         // ポップアップ表示のCLOSE
  174.         $newsDetailRole.on('click', function(e){
  175.             // is-activeを確認する事で、背景以外のクリックイベントを回避します
  176.             if ( $(e.target).hasClass( 'is-active' ) ) {
  177.                 $newsDetailRole.removeClass( 'is-active' );
  178.             }
  179.         });
  180.     });
  181. </script>