2016-08-24 6 views
0

2つのサブフィールド、image_2_column_textimage_right_text_leftを含むコードpost_builderで、1つの柔軟なコンテンツフィールドを持つフィールドグループがあります。次のようにMagento/Fishpig Wordpressと高度なカスタムフィールド

<?php echo $post->getMetaValue('post_builder') ?>

これはシリアル化された配列を返します:

私はポストのために、私は次のコードを追加しましたMagentoの上のポストビュー・テンプレート内のこれらのフィールドを埋めてきた

a:2:{i:0;s:19:"image_2_column_text";i:1;s:21:"image_right_text_left";}

追加したアイテムをループしてWordpress投稿に追加したコンテンツを引き出せるようにするにはどうすればいいですか?

あり、これを処理するために、次のファイル内のコードのように見えるが、それは正しくレンダリングされません。次のように私が使用しているapp/code/community/Fishpig/Wordpress/Addon/ACF/Model/Field/Renderer/Flexible/Content.php

バージョンは次のとおりです。

  • Magentoの:1.9.2.4
  • Wordpressの:プロ4.6.0
  • ACF:5.4.2
  • Fishpig Wordpressの:4.2.0.19
  • Fishpig ACF:基本的に

    https://bitbucket.org/Bobadevv/acf-flexible-content-fishpig

    :私はあなたと同じ問題を抱えていたとして、私は、私は自分のインストールに実装することができた、このリソースを見つけた1.4.0.8

答えて

0

これは、次のような条件文を使用することで教えてくれました:

if ($flexLayout["acf_fc_layout"] == "fct_text_image") { 

柔軟なコンテンツをフィルタリングして適切に表示することができます。

EDIT:この作業をさらに進めていくうちに、完全に機能していることを確認して、必要に応じて同じことを行う必要があります。

はのは、柔軟なコンテンツを開始してみましょう:

if ($post->getMetaValue('content')): 
    $flex = $post->getMetaValue('content'); 
     $pos = 0; 
     foreach ($flex as $flexLayout) { 

は、そこでここでは、基本的にリピーターフィールドとしてフレックスコンテンツを処理しています。ループカウンタを追加して少しずれているので、動的IDを持つことができます(複数のjsインスタンスが必要な場合)

フレックスブロックに関連付ける各HTMLブロックをロードする必要があります。まず、我々は(wordpress.xmlレイアウトファイルで)ブロックにMagentoの方法を定義する必要があります。

<reference name="flexible_content"> 
    <block name="fct_cta_carousel" template="wordpress/fct/fct_cta_carousel.phtml" type="core/template"/> 

そして、上記ループ内:

$this->getChild('fct_cta_carousel')->setData("flex_layout", $flexLayout)->setData('pos',$pos); 
     echo $this->getChildHtml('fct_cta_carousel', false); 

ブロックPHTML次のようになります。

<?php 
$flexLayout = $this->getFlexLayout(); 
if ($flexLayout[acf_fc_layout] == "cta_carousel") { 
    if ($flexLayout[carousel_visibility] == 1) { 
    $carouID = "homepage-carousel-" . $this->getPos(); //To enable multiple carousels, we need a dynamic ID, based on position in flex content. 
    echo '<div class="featured-products featured-products-alt featured-products-visible">'; 
    echo '<h2>' . $flexLayout[cta_row_title_carousel] . '</h2>'; 
    echo '<div id="'. $carouID .'" class="featured-carousel">'; 
    foreach($flexLayout[cta_rows_carousel] as $row){ 
     echo '<div class="carousel-prod">'; 
     echo '<div class="col">'; 

      echo '<div class="img-overlay">'; 
       echo '<img src="'.$row[cta_row_image].'" alt="'. $row['cta_row_title'] .'">'; 
      echo '</div>'; 
      echo '<h3>' . $row['cta_row_title'] . '</h3>'; 
      echo '<a href="'.$row['cta_row_url'].'" class="cover-link"><span class="hide">'.$row['cta_row_title'] . '</span></a>'; 
     echo '</div>'; 
     echo '</div>'; 
    } 
    echo '</div>'; 
echo '</div>'; 

本質的にこれは次のとおりです。

  • フレックスレイアウトを開始します
  • ループ内のフレックスコンテンツがACFで指定されたIDと一致するかどうかを確認します。
  • フレックスコンテンツフィールドをそのままのACFリピーターのように処理します。

必要に応じてすすぎリピートできます。

明らかに、構造全体がそのレポにあります。私はあなたにリンクしました。

関連する問題