wordpress fishpig magento 安装 - getPostListHtml()
Posted
技术标签:
【中文标题】wordpress fishpig magento 安装 - getPostListHtml()【英文标题】:wordpress fishpig magento installation - getPostListHtml() 【发布时间】:2017-01-21 10:06:16 【问题描述】:我在我的 magento 商店上安装了一个 wordpress,使用了第 3 方模块 fishpig。
我有一个名为 list.phtml 的页面,它使用$this->getPostListHtml()
发布一个类别中的所有内容我添加了另一个 div 并复制了它,但现在它只是将第一个 div 中的帖子复制到第二个。我如何制作一个独特的第二个 div,所以当在后端发布帖子时,它只会发布到同一页面上的第二个 div。目前,我正在通过 slug 和 post collection 获取类别,然后设置顺序(asc),然后我循环遍历每个页面的类别和骑手,以获取相似的内容。我有几个页面,但在每个骑手页面上,仍然必须在 Team 下方发布 Team 2 帖子。我希望这是有道理的。
cpt/team/list.phtml
<?php
/**
* Team (Rider) - Landing Page
*/
/* @var $this test_Wordpress_Block_Cpt_Type_View */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $postType Fishpig_Wordpress_Addon_CPT_Model_Type */
$postType = $this->getPostType();
$categorySlug = $this->getCurrentCategorySlug();
$allCategories = $helper->getAllCategories();
$instagramHandles = array(
'skate' => 'testskate',
'surf' => 'testsurf',
'snow' => 'testsnow',
'mx' => 'testmx',
'testunity' => 'testunity',
'girls' => 'testgirls',
);
$textRider = ($categorySlug == 'testunity') ? 'Ambassador' : 'Rider';
$htmlRiderPicks = $this->getChildHtml('picks');
$hasEvents = ($events = $this->getChild('events') && $this->getChild('events')->getTotal());
$_theseRiders = array();
?>
<?php if($categorySlug): ?>
<?php $curCategory = $helper->getCategoryBySlug($categorySlug) ?>
<?php $riders = $curCategory->getPostCollection()->addPostTypeFilter($postType->getPostType())->setOrder('menu_order','asc'); ?>
<div class="team-header row">
<div class="columns">
<h1 class="team-page-title"><?php echo $this->__('Team'); ?></h1>
<ul class="team-categories j-team-category-list">
<?php foreach($helper->getTeamCategories() as $category): /* @var $category Fishpig_Wordpress_Model_Post_Category */ ?>
<li class="j-team-title <?php if($category->getSlug() == $categorySlug): ?>active<?php endif; ?>">
<a href="<?php echo $this->getCategoryUrl($category) ?>"><?php echo $helper->escapeHtml($category->getName()) ?></a>
<?php $riders = $category->getPostCollection()->addPostTypeFilter($postType->getPostType())->setOrder('menu_order','asc'); ?>
<div class="riders-names-list j-riders-names-list only-mobile-show">
<ul>
<?php foreach($riders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<li>
<a href="<?php echo $rider->getPermalink() ?>"><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
</li>
<?php
if ($category->getSlug() == $categorySlug)
$_theseRiders = $riders;
?>
<?php endforeach; ?>
</ul>
<div class="riders-names-list mobile-hide">
<ul>
<?php foreach($_theseRiders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<li>
<a href="<?php echo $rider->getPermalink() ?>"><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
</div>
<div id="team-panel" class="team-panel">
<div class="riders-panel" id="Rider">
<div class="riders-list team-riders-list">
<div class="row">
<?php echo $this->getPostListHtml() ?>
</div>
</div>
</div>
</div>
<br><br>
<div class="team-header row">
<div class="columns">
<h1 class="team-page-title"><?php echo $this->__('Second Team'); ?></h1>
<div id="second-team-panel" class="second-team-panel">
<div class="second-riders-panel" id="Second_Rider">
<div class="riders-list team-riders-list-second">
<div class="row">
<?php echo $this->getPostListHtml() ?>
</div>
</div>
</div>
</div>
</div></div>
/**
* Generates and returns the collection of posts
*
* @return Fishpig_Wordpress_Model_mysql4_Post_Collection
*/
protected function _getPostCollection()
return Mage::getResourceModel('wordpress/post_collection');
/**
* Returns the HTML for the post collection
*
* @return string
*/
public function getPostListHtml()
return $this->getPostListBlock()->toHtml();
/**
* Gets the post list block
*
* @return Fishpig_Wordpress_Block_Post_List
*/
public function getPostListBlock()
if (is_null($this->_postListBlock))
if (($block = $this->getChild($this->_postListBlockName)) === false)
$block = $this->getLayout()
->createBlock('wordpress/post_list', $this->_postListBlockName . rand(1111, 9999))
->setTemplate($this->getPostListTemplate());
$block->setWrapperBlock($this);
$this->_postListBlock = $block;
return $this->_postListBlock;
cpt/team/renderer/list.phtml
<?php
/**
* Team (Riders) - List View Renderer
*/
/* @var $this Fishpig_Wordpress_Block_Post_List_Renderer */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $post Fishpig_Wordpress_Model_Post */
$post = $this->getPost();
$featuredImage = $post->getFeaturedImage();
/** @var test_Wordpress_Helper_Image $teamHelper */
$imageHelper = $this->helper('test_wordpress/image');
$background = $imageHelper->getBackground($post);
?>
<div class="m-grid-6 columns">
<div class="rider-list-item fade-item">
<a class="rider-info" href="<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>">
<span class="post-img">
<img class="rider-background fade-image" src="<?php echo $background; ?>" />
<?php if ($featuredImage): ?>
<img class="rider-photo " src="<?php echo $featuredImage->getImageByType('thumb-240x220') ?>" >
<?php endif; ?>
</span>
<span class="rider-list-name"><?php echo $this->escapeHtml($post->getPostTitle()) ?></span>
</a>
</div>
</div>
cpt/team/renderer/view.phtml
<?php
/**
* Team (Riders) - Post View Renderer
*
*/
/* @var $this Fishpig_Wordpress_Block_Post_View */
/* @var $helper test_Wordpress_Helper_Data */
$helper = $this->helper('wordpress');
/* @var $post Fishpig_Wordpress_Model_Post */
$post = $this->getPost();
$nextPost = $post->getNextPost();
$prevPost = $post->getPreviousPost();
/* @var $postType Fishpig_Wordpress_Addon_CPT_Model_Type */
$postType = $helper->getPostTypeByPost($post);
/* @var $parent Fishpig_Wordpress_Model_Post_Category */
$parent = $post->getParentCategory();
/** @var test_Wordpress_Helper_Team $teamHelper */
$teamHelper = $this->helper('test_wordpress/team');
$textRider = ($parent->getSlug() == 'testunity') ? 'Ambassador' : 'Rider';
$layoutType = $post->getCustomField('details_layout');
?>
<div class="row">
<div class="column">
<div class="categories-dropdown riders-dropdown">
<div class="selectBox">
<select onChange="setLocation(this.value);">
<?php foreach($helper->getTeamCategories() as $category): /* @var $category Fishpig_Wordpress_Model_Post_Category */ ?>
<?php $selected = ($category->getId() == $parent->getId()) ? ' selected="true"' : '' ?>
<option value="<?php echo $helper->getCategoryUrl($postType,$category) ?>"<?php echo $selected ?>><?php echo $helper->escapeHtml($category->getName()) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="selectBox">
<select onChange="setLocation(this.value);">
<option value="<?php echo $helper->getCategoryUrl($postType,$parent) ?>"><?php echo $helper->__('All '.$textRider.'s') ?></option>
<?php $riders = $parent->getPostCollection()->addPostTypeFilter($post->getPostType());?>
<?php foreach($riders as $rider): /* @var $rider Fishpig_Wordpress_Model_Post */ ?>
<?php $selected = ($rider->getId() == $post->getId()) ? ' selected="true"' : '' ?>
<option value="<?php echo $rider->getPermalink() ?>"<?php echo $selected ?>><?php echo $helper->escapeHtml($rider->getPostTitle()) ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
</div>
</div>
<div class="row artists-arrows">
<div class="columns">
<?php if ($prevPost instanceof Fishpig_Wordpress_Model_Post && $prevPost->getId()): ?>
<a href="<?php echo $prevPost->getPermaLink(); ?>" class="artist-previous">
<i class="icon-arrow-left"></i><?php echo $helper->__('Previous') ?>
</a>
<?php endif; ?>
<?php if ($nextPost instanceof Fishpig_Wordpress_Model_Post && $nextPost->getId()): ?>
<a href="<?php echo $nextPost->getPermaLink(); ?>" class="artist-next">
<i class="icon-arrow-right"></i><?php echo $helper->__('Next') ?>
</a>
<?php endif; ?>
</div>
</div>
<div class="rider-main-info-wrapper wide-panel">
<div class="backgrounds">
<div class="item item_2">
<?php echo $this->getLayout()->createBlock('test_wordpress/slider')->setPost($post)->toHtml(); ?>
</div>
</div>
<div class="rider-main-info row">
<div class="team-rider-details column">
<?php $featuredImage = $post->getFeaturedImage();?>
<?php if ($featuredImage): ?>
<img src="<?php echo $featuredImage->getImageByType('thumb-240x220') ?>" class="detail-rider-image detail-thumbnail" />
<?php endif; ?>
<div class="team-rider-info">
<h1 class="dark rider-name"><?php echo $helper->escapeHtml($post->getPostTitle()) ?></h1>
<p class="rider-details-info">
<?php if($post->getCustomField('hometown')): ?>
<span><?php echo $helper->__('From:') ?> <?php echo $helper->escapeHtml($post->getCustomField('hometown')) ?></span>
<?php endif; ?>
<?php if ($post->getCustomField('birthdate') && $helper->getAgeByBirthdate($post->getCustomField('birthdate'))): ?>
<span><?php echo $helper->__('Age:') ?> <?php echo $helper->escapeHtml($helper->getAgeByBirthdate($post->getCustomField('birthdate'))) ?></span>
<?php endif;?>
</p>
</div>
</div>
</div>
</div>
<div class="more-info-wrapper">
<div class="more-info-content row">
<div class="columns">
<div class="rider-arrow-show js-more-content">
<i class="icon-arrow-down"></i>
<span class="more-text"><?php echo $helper->__('more info') ?></span>
<span class="less-text"><?php echo $helper->__('less info') ?></span>
<span class="more-text-mobile"><?php echo $helper->__('more') ?></span>
<span class="less-text-mobile"><?php echo $helper->__('less') ?></span>
</div>
<div class="rider-social-icons">
<a href="http://facebook.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('facebook_handle'))); ?>" target="_blank"><i class="icon-facebook-large"></i></a>
<a href="http://twitter.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('twitter_handle'))); ?>" target="_blank"><i class="icon-twitter-small"></i></a>
<a href="http://instagram.com/<?php echo $helper->escapeHtml($helper->__($post->getCustomField('insta_handle'))); ?>" target="_blank"><i class="icon-instagram-large"></i></a>
</div>
</div>
</div>
<div class="rider-content-wrapper">
<div class="viewport row">
<div class="overview">
<?php if ($layoutType != 'left'): ?>
<div class="more-left m-grid-8 columns personal-info">
<?php if ($post->getCustomField('birthdate') && $helper->getAgeByBirthdate($post->getCustomField('birthdate'))): ?>
<div>
<label><?php echo $helper->__('Birth Date:') ?></label>
<?php echo $helper->formatDate($post->getCustomField('birthdate'),'m/d/y'); ?><br/>
</div>
<?php endif; ?>
<?php echo $post->getPostContent() ?>
</div>
<?php endif; ?>
<?php if ($layoutType != 'right'): ?>
<div class="more-right m-grid-4 columns">
<?php echo $post->getCustomField('extrastats'); ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php $instagramContent = $teamHelper->getInstagramBlock($post); ?>
<?php if($instagramContent): ?>
<div class="rider-thumb row">
<?php echo $instagramContent; ?>
</div>
<?php endif; ?>
<?php echo $this->getLayout()->createBlock('test_wordpress/products')->setPost($post)->setTitle($helper->__('%s Wears',$post->getPostTitle()))->toHtml(); ?>
<?php
$isShowNews = false;
$blockNews = $this->getChild('news.related');
if ($blockNews)
$blockNews->setTag($post->getPostTitle());
$blockNews->setCategory($parent->getSlug());
if ($blockNews->getPostCollection()->count())
echo $blockNews->toHtml();
$isShowNews = true;
if (!$isShowNews)
$blockNews = $this->getChild('news.resent');
if ($blockNews)
$blockNews->setCategory($parent->getSlug());
echo $blockNews->toHtml();
【问题讨论】:
$this->getPostListHtml()
与类别相关,所以如果您调用相同的方法,您希望如何获得其他结果?不知道你想要什么结果。 $this 还引用了一个对象的实例,所以我们需要更多的代码,因为我们看不到它是如何实例化的。也许你可以传递一个类别。
我想要不同的结果,我知道我必须使用不同的方法。我想通过不同的类别,是的。 @Sylwit 我将为该对象发布更多代码以及它是如何实例化的。感谢您的回复。
还是不够,请将你的两个文件都粘贴过来
更新了该文件夹目录中的所有文件。 @Sylwit
【参考方案1】:
根据您部分发布的代码,我只能给您一个概念性的答案。
根据您现在发布的内容,您可以通过两种方式综合新旧帖子之间的唯一区别:
通过 post_date,您可以调用几乎相同的函数,但使用最后显示的帖子的 post_date 作为参数,以便您可以过滤具有较新 post_date 的新结果。在setOrder(...)
之前或之后或通过更改 wpQuery 添加新的闭包;
或按偏移量。考虑到您不会有回溯的帖子,所有新帖子的偏移量都将与初始帖子数相等。所以你必须setOffset($oldCount);
这样你才能从最后显示的帖子开始获取最新的帖子。
您只需要使用所需参数更新 wp 查询,或者找到一种方法以其他方式标记您的帖子:
-
更简单的方法是在数组
$displayed_post_ids
中跟踪您显示的帖子 ID,然后使用 post__not_in
进行查询,如下例所示:
$args = array(
'post_type' => 'post',
//... other args
'post__not_in' => array($displayed_post_ids) // Don't show this posts
);
-
另一种选择可能是 post_meta 字段。通过这种方式,您将拥有更多控制权,并且您也可以将相同的旧类别用于新帖子。
您可以添加一个不会在页面中显示的 post_meta 信息,并且该信息将跟踪您的帖子是否已显示在第一个 div 中。考虑到更容易更改您已经拥有的帖子,您可以添加 post_meta
_wasDisplayed
(当您在第一个 div 中显示帖子时使用类似 update_post_meta( $post_id, '_wasDisplayed', true);
的东西也可以做到这一点)
您可以为创建时的所有帖子设置该 post_meta 值的默认 false 值。这将帮助您进行查询。 在第二个 div 上,您将调用生成器函数并检查您的帖子是否有 post_meta 以及它是否为 false。
如果需要,您还可以稍后重置 post_meta 值。
如果您使用分页和其他可能使您的工作更复杂的小细节,还需要知道您打算显示多少个帖子。
注意 - 本案例解决方案:
5.由于您的业务逻辑似乎更多地与类别相关,因此有一个更直接的解决方案:
在添加新帖子的支持过程中,为每个新帖子分配一个附加类别(称为:“新未显示的帖子”),此类别将用作第二个 div 中的过滤器参数。
请注意,您必须从第一个 div 中调用 getPostListHtml()
时发布的所有帖子中删除此类别,否则您将在第二个 div 中有不需要的帖子。
您可以使用 wp 查询对象的类别参数之一在包装函数中实现这一点:
Category Parameters
显示与特定类别相关的帖子。
cat (int) - use category id.
category_name (string) - use category slug.
category__and (array) - use category id.
category__in (array) - use category id.
category__not_in (array) - use category id.
希望对你有帮助, 科德鲁特,KMM
【讨论】:
嗨 Codrut,所以我不能简单地使用 $this->getPostListHtml() 而是将一个新的类别 ID 附加到这个帖子对象?也许强迫它显示来自特定类别的所有帖子? @KRONMARK 媒体 当然有。该解决方案与您的应用程序逻辑非常紧密相关。我会相应地更新答案。 只是与您确认最终答案?我不能使用它,因为它只会复制帖子。 getPostListHtml() ?> 你搞定了整个逻辑吗?我的意思是: 1. 将“新”类别添加到数据库并检索分配的 ID - 用于过滤参考。 2. 在 DIV1 中显示类别,并从显示的帖子中删除所谓的“新”类别。 3. 将 DIV2 设置为仅显示“新”类别中的帖子。 4. 在新创建的帖子上设置“新”类别,以便 DIV2 包含它们 - 并且一定要确保你有一些机制来确保一旦后端有新帖子时只刷新 DIV2 数据。对于第 4 步,您必须更改过滤并包含“新”类别!以上是关于wordpress fishpig magento 安装 - getPostListHtml()的主要内容,如果未能解决你的问题,请参考以下文章
markdown Fishpig / Magento内的自定义字段
markdown Fishpig / Wordpress短信