WordPress Fishpig Magento Installation – getPostListHtml()

Lesezeit: 15 Minuten

Benutzer-Avatar
diese Methode

Ich habe eine WordPress-Installation in meinem Magento-Shop, die das Drittanbieter-Modul fishpig verwendet.

Ich habe eine Seite namens list.phtml, die den gesamten Inhalt einer Kategorie postet $this->getPostListHtml() Ich habe ein weiteres Div hinzugefügt und es repliziert, aber jetzt werden nur die Posts vom ersten Div in das zweite dupliziert. Wie erstelle ich ein eindeutiges zweites Div, damit bei Posts im Backend nur das zweite Div auf derselben Seite gepostet wird? Derzeit erhalte ich Kategorie nach Slug und Post-Sammlung und lege dann die Reihenfolge fest (asc) und dann durchlaufe ich Kategorie und Reiter für jede Seite, die ähnlichen Inhalt zieht. Ich habe mehrere Seiten, aber auf jeder Fahrerseite muss es immer noch Team 2-Posts unter Team geben. Ich hoffe das ergibt Sinn.

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="https://stackoverflow.com/questions/39476229/<?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="https://stackoverflow.com/questions/39476229/<?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; ?>" alt="test Riders" />
            <?php if ($featuredImage): ?>
                <img class="rider-photo " src="<?php echo $featuredImage->getImageByType('thumb-240x220') ?>" alt="<?php echo $this->escapeHtml($post->getPostTitle()) ?>">
            <?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="https://stackoverflow.com/questions/39476229/<?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" alt="<?php echo $this->escapeHtml($post->getPostTitle()) ?>" />
            <?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();
    }
}

  • das $this->getPostListHtml() bezieht sich auf die Kategorie, also wie möchten Sie andere Ergebnisse haben, wenn Sie dieselbe Methode aufrufen? Ich bin mir nicht sicher, welches Ergebnis Sie möchten. Auch $this bezieht sich auf eine Instanz eines Objekts, also brauchen wir etwas mehr Code, da wir nicht sehen, wie es instanziiert wird. Vielleicht kannst du eine Kategorie bestehen.

    – Sylwit

    25. Oktober 2016 um 17:34 Uhr

  • Ich möchte andere Ergebnisse und verstehe, dass ich eine andere Methode anwenden muss. Ich möchte eine andere Kategorie bestehen, ja. @Sylwit Ich werde mehr Code für dieses Objekt posten und wie es instanziiert wird. Danke für das Antworten.

    – diese Methode

    25. Oktober 2016 um 23:56 Uhr

  • Immer noch nicht genug, bitte fügen Sie alle Ihre beiden Dateien ein

    – Sylwit

    26. Oktober 2016 um 1:20 Uhr

  • Aktualisiert mit allen Dateien in diesem Ordnerverzeichnis. @ Sylwit

    – diese Methode

    26. Oktober 2016 um 2:03 Uhr

Benutzer-Avatar
Codrut TG

Basierend auf Ihrem teilweise geposteten Code kann ich Ihnen nur eine konzeptionelle Antwort geben.

Aus dem, was Sie bisher gepostet haben, könnte Ihr einziger Unterschied zwischen neuen und alten Posts auf zwei Arten synthetisiert werden:

  1. Durch nach Datum, und Sie können fast dieselbe Funktion aufrufen, aber mit dem post_date des letzten angezeigten Beitrags als Parameter, damit Sie die neuen Ergebnisse filtern können, die ein neueres post_date haben. Hinzufügen eines neuen Abschlusses davor oder danach setOrder(...) oder durch Ändern der wpQuery;

  2. Oder von versetzt. In Anbetracht der Tatsache, dass Sie keine zurückdatierten Posts haben werden, haben alle neuen Posts einen Offset, der gleich der anfänglichen Posts-Zählung ist. also musst du setOffset($oldCount); Auf diese Weise erhalten Sie die neuesten Beiträge, beginnend mit dem zuletzt angezeigten Beitrag.

Sie müssen nur die wp-Abfrage mit dem gewünschten Parameter aktualisieren oder einen Weg finden, Ihre Beiträge auf andere Weise zu taggen:

  1. Einfacher wäre es, Ihre angezeigten Post-IDs in einem Array zu verfolgen $displayed_post_idsund als Abfrage mit post__not_inwie im folgenden Beispiel:


$args = array(
'post_type' => 'post',
//... other args
'post__not_in' => array($displayed_post_ids) // Don't show this posts
);

  1. Eine weitere Alternative wäre evtl post_meta Felder. Auf diese Weise haben Sie mehr Kontrolle und können dieselben alten Kategorien auch für neue Beiträge verwenden.
    Sie können post_meta-Informationen hinzufügen, die nicht auf der Seite angezeigt werden und die nachverfolgen, ob Ihre Beiträge im ersten Div angezeigt wurden oder nicht. Da es einfacher ist, bereits vorhandene Posts zu ändern, können Sie eine post_meta hinzufügen _wasDisplayed (mit etwas wie update_post_meta( $post_id, '_wasDisplayed', true); Wenn Sie den Beitrag im ersten div anzeigen, kann dies auch der Fall sein.)

Sie können eine Voreinstellung festlegen FALSCH Wert dieses post_meta-Werts für alle Ihre Posts bei der Erstellung. Das hilft Ihnen bei der Abfrage. Auf dem zweiten div rufen Sie die Generatorfunktion auf und prüfen, ob Ihre Beiträge das post_meta haben und ob es ist FALSCH.

Außerdem können Sie die post_meta-Werte später bei Bedarf zurücksetzen.

Für die Implementierung ist es auch notwendig zu wissen, wie viele Posts Sie anzeigen möchten, ob Sie Paginierung und andere kleine Details verwenden, die Ihre Arbeit etwas komplexer machen könnten.

Hinweis – diese Falllösung:

5. Da Ihre Geschäftslogik mehr mit Kategorien zu tun zu haben scheint, gibt es eine einfachere Lösung:
Beim unterstützten Prozess, der neue Beiträge hinzufügt, weisen Sie jedem neuen Beitrag eine zusätzliche Kategorie zu (so etwas wie: „Neue nicht angezeigte Beiträge“). Diese Kategorie wird als Filterargument im zweiten div verwendet. Berücksichtigen Sie, dass Sie diese Kategorie aus allen Beiträgen entfernen müssen, die zum Zeitpunkt Ihres Anrufs gepostet werden getPostListHtml() aus dem ersten Div, sonst haben Sie unerwünschte Beiträge im zweiten Div.

Sie können dies in einer Wrapper-Funktion mit einem der Kategorieargumente für das wp-Abfrageobjekt erreichen:

Category Parameters

Beiträge anzeigen, die bestimmten Kategorien zugeordnet sind.

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.

Hoffe es hilft, Codrut, KMM

  • Hallo Codrut, also gibt es keine Möglichkeit, einfach $this->getPostListHtml() zu verwenden, aber eine neue Kategorie-ID an dieses Post-Objekt anzuhängen? Vielleicht, um es zu zwingen, alle Beiträge einer bestimmten Kategorie anzuzeigen? @KRONMARK MEDIEN

    – diese Methode

    26. Oktober 2016 um 16:49 Uhr

  • Natürlich gibt es das. Die Lösung ist sehr eng mit Ihrer App-Logik verbunden. Ich werde die Antwort entsprechend aktualisieren.

    – Codrut TG

    26. Oktober 2016 um 22:14 Uhr


  • Ich melde mich nur wegen der endgültigen Antwort bei Ihnen? Ich kann dies nicht verwenden, da es nur die Beiträge dupliziert.

    getPostListHtml() ?>

    – diese Methode

    28. Oktober 2016 um 21:59 Uhr

  • Haben Sie die gesamte Logik ausgearbeitet? Ich meine: 1. Fügen Sie der DB die Kategorie “NEU” hinzu und rufen Sie die zugewiesene ID ab – zum Filtern von Referenzen. 2. Zeigen Sie Kategorien in DIV1 an und entfernen Sie auch die sogenannte “NEU”-Kategorie aus den angezeigten Beiträgen. 3. Stellen Sie DIV2 so ein, dass nur Beiträge angezeigt werden, die in der Kategorie „NEU“ sind. 4. Legen Sie die Kategorie „NEU“ für neu erstellte Posts fest, damit DIV2 sie enthält – und stellen Sie sicher, dass Sie einen Mechanismus haben, um sicherzustellen, dass nur die DIV2-Daten aktualisiert werden, sobald neue Posts im Backend vorhanden sind. Für Schritt 4 müssen Sie die Filterung ändern und die Kategorie “NEU” aufnehmen!

    – Codrut TG

    28. Oktober 2016 um 22:16 Uhr

1385970cookie-checkWordPress Fishpig Magento Installation – getPostListHtml()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy