Jump to content
bgbruehl

RSS Feed - Einstellungen, HOOK usw.???

Recommended Posts

Hallo Leute,

 

mal wieder ich. Nachdem mir Whiley meine Frage beantwortet hatte, habe ich nun ein neues eventuelles Problem.

Da ich ja nun meine RSS-Feed URL kenne, habe ich ein wenig rumgespielt. Eigentlich möchte ich folgendes: Jeder von mir neu eingestellte Artikel soll in meinem Feed immer an oberste Stelle gelistet sein, was ja eigentlich auch jeder Feed macht, sogar meiner nur mit einem Unterschied:

Kurz zur Erklärung bzw. Aufbau meines Shop / Kategorien. Ich habe eine Hauptkategorie, darunter kommen die Unterkategorien

1 Ebene - Hauptkategorie: Zeitschriften & Magazine

2. Ebene - Unterkategorie: Erotik - Geschichte / Politik - Mode - Musik usw.

3. Ebene - Unterkategorie von zum Beispiel Geschichte / Politik: stern - DER SPIEGEL - pardon

und dann kommen die Artikel unter der jeweiligen Kategorien

Wenn ich jetzt einen neuen Artikel zum Beispiel in der Kategorie stern (category_id 116) einstelle und den Feed in Firefox aufrufe, dann erscheint auch der Artikel an oberste Stelle, doch nur wenn ich auch den Feed in dieser Kategorie aufrufe. Der Feed sieht dann so aus http://www.meinshop.de/module/ps_feeder/rss?id_category=116&orderby=date_add&orderway=desc

Soweit so gut, doch wenn ich auf die Startseite gehe und auch die Feed URL aufrufe, dann erscheint dieser neue Artikel nicht, sondern nur die Artikel, die gerade auf der Startseite sind.

Das würde ich mir noch gefallen lassen, denn ich habe ja noch eine Kategorie wo alle Artikel die im Shop sind gelistet sind, das wäre die Hauptkategorie (Ebene 1). Alle Artikel die ich einstelle, erscheinen immer hier, doch wenn ich da die Feed URL aufrufe, dann kommt da nichts, erst ab Unterkategorie (Ebene 2) kann ich Feeds abrufen bzw. werden mir diese angezeigt.

 

Kann mir jemadn helfen wie ich das ganze hinbekomme damit ich einfach meine neuesten artikel, egal in was für eine Kategorie ganz normal gelistet bekommen. Muss ich vielleicht was in der Datei ps_feeder ändern?

 

Share this post


Link to post
Share on other sites

achso eine sichtbare Kategorie? Ja das wollte ich nicht. Dann wird ja alles doppelt in Google indexiert! Es muss doch auch so gehen. Schau mal kann man da was ändern / umschreiben?

 

<?php
/*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2016 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

if (!defined('_PS_VERSION_')) {
    exit;
}

class Ps_Rssfeed extends Module
{
    protected $templateFile;

    public function __construct()
    {
        $this->name = 'ps_rssfeed';
        $this->author = 'PrestaShop';
        $this->version = '1.0.1';
        $this->need_instance = 0;

        $this->bootstrap = true;
        parent::__construct();

        $this->displayName = $this->trans('RSS feed block', array(), 'Modules.Rssfeed.Admin');
        $this->description = $this->trans('Adds a block displaying a RSS feed.', array(), 'Modules.Rssfeed.Admin');

        $this->ps_versions_compliancy = array('min' => '1.7.0.0', 'max' => _PS_VERSION_);

        $this->templateFile = 'module:ps_rssfeed/views/templates/hook/ps_rssfeed.tpl';
    }

    public function install()
    {
        return (parent::install()
            && Configuration::updateValue('RSS_FEED_TITLE', $this->trans('RSS feed', array(), 'Modules.Rssfeed.Admin'))
            && Configuration::updateValue('RSS_FEED_NBR', 5)
            && $this->registerHook('displayFooter')
        );
    }

    public function uninstall()
    {
        if (!parent::uninstall() ||
            !Configuration::deleteByName('RSS_FEED_TITLE') ||
            !Configuration::deleteByName('RSS_FEED_NBR')
        ) {
            return false;
        }
        return true;
    }

    public function getContent()
    {
        $output = '';

        if (Tools::isSubmit('submitBlockRss')) {
            $errors = array();
            $urlfeed = Tools::getValue('RSS_FEED_URL');
            $title = Tools::getValue('RSS_FEED_TITLE');
            $nbr = (int)Tools::getValue('RSS_FEED_NBR');

            if ($urlfeed and !Validate::isAbsoluteUrl($urlfeed)) {
                $errors[] = $this->trans('Invalid feed URL', array(), 'Modules.Rssfeed.Admin');
            } elseif (!$title or empty($title) or !Validate::isGenericName($title)) {
                $errors[] = $this->trans('Invalid title', array(), 'Modules.Rssfeed.Admin');
            } elseif (!$nbr or $nbr <= 0 or !Validate::isInt($nbr)) {
                $errors[] = $this->trans('Invalid number of feeds', array(), 'Modules.Rssfeed.Admin');
            } elseif (stristr($urlfeed, $_SERVER['HTTP_HOST'] . __PS_BASE_URI__)) {
                $errors[] = $this->trans('You have selected a feed URL from your own website. Please choose another URL.', array(), 'Modules.Rssfeed.Admin');
            } elseif (!($contents = Tools::file_get_contents($urlfeed))) {
                $errors[] = $this->trans('Feed is unreachable, check your URL', array(), 'Modules.Rssfeed.Admin');
            } /* Even if the feed was reachable, We need to make sure that the feed is well formated */
            else {
                try {
                    new SimpleXMLElement($contents);
                } catch (Exception $e) {
                    $errors[] = $this->trans('Invalid feed: %message%', array('%message%' => $e->getMessage()), 'Modules.Rssfeed.Admin');
                }
            }

            if (!sizeof($errors)) {
                Configuration::updateValue('RSS_FEED_URL', $urlfeed);
                Configuration::updateValue('RSS_FEED_TITLE', $title);
                Configuration::updateValue('RSS_FEED_NBR', $nbr);

                $output .= $this->displayConfirmation($this->trans('The settings have been updated.', array(), 'Admin.Notifications.Success'));
                $this->_clearCache($this->templateFile);
            } else {
                $output .= $this->displayError(implode('<br />', $errors));
            }
        } else {
            $errors = array();
            if (stristr(Configuration::get('RSS_FEED_URL'), $_SERVER['HTTP_HOST'] . __PS_BASE_URI__)) {
                $errors[] = $this->trans('You have selected a feed URL from your own website. Please choose another URL.', array(), 'Modules.Rssfeed.Admin');
            }

            if (sizeof($errors)) {
                $output .= $this->displayError(implode('<br />', $errors));
            }
        }
        return $output . $this->renderForm();
    }

    public function hookDisplayFooter($params)
    {
        // Conf
        $title = strval(Configuration::get('RSS_FEED_TITLE'));
        $url = strval(Configuration::get('RSS_FEED_URL'));
        $nb = (int) (Configuration::get('RSS_FEED_NBR')) ? (int) (Configuration::get('RSS_FEED_NBR')) : 5;

        $cacheId = $this->getCacheId($this->name . '|' . date("YmdH"));
        if (!$this->isCached($this->templateFile, $cacheId)) {
            $rss_links = array();
            if ($url && ($contents = Tools::file_get_contents($url))) {
                try {
                    $xml = new SimpleXMLElement($contents);
                    $loop = 0;
                    if (!empty($xml->channel->item)) {
                        foreach ($xml->channel->item as $item) {
                            if (++$loop > $nb) {
                                break;
                            }
                            $rss_links[] = (array)$item;
                        }
                    }
                } catch (Exception $e) {
                    Tools::dieOrLog($this->trans('Error: invalid RSS feed in "%module_name%" module: %message%', array('%module_name%' => $this->name, '%message%' => $e->getMessage()), 'Modules.Rssfeed.Admin'));
                }
            }

            $this->smarty->assign(array(
                'title' => ($title ? $title : $this->trans('RSS feed', array(), 'Modules.Rssfeed.Admin')),
                'rss_links' => $rss_links
            ));
        }

        return $this->fetch($this->templateFile, $cacheId);
    }

    public function renderForm()
    {
        $fields_form = array(
            'form' => array(
                'legend' => array(
                    'title' => $this->trans('Settings', array(), 'Admin.Global'),
                    'icon' => 'icon-cogs'
                ),
                'input' => array(
                    array(
                        'type' => 'text',
                        'label' => $this->trans('Block title', array(), 'Modules.Rssfeed.Admin'),
                        'name' => 'RSS_FEED_TITLE',
                        'desc' => $this->trans('Create a title for the block (default: \'RSS feed\').', array(), 'Modules.Rssfeed.Admin'),
                    ),
                    array(
                        'type' => 'text',
                        'label' => $this->trans('Add a feed URL', array(), 'Modules.Rssfeed.Admin'),
                        'name' => 'RSS_FEED_URL',
                        'desc' => $this->trans('Add the URL of the feed you want to use (sample: http://news.google.com/?output=rss).', array(), 'Modules.Rssfeed.Admin'),
                    ),
                    array(
                        'type' => 'text',
                        'label' => $this->trans('Number of threads displayed', array(), 'Modules.Rssfeed.Admin'),
                        'name' => 'RSS_FEED_NBR',
                        'class' => 'fixed-width-sm',
                        'desc' => $this->trans('Number of threads displayed in the block (default value: 5).', array(), 'Modules.Rssfeed.Admin'),
                    ),
                ),
                'submit' => array(
                    'title' => $this->trans('Save', array(), 'Admin.Actions'),
                )
            ),
        );

        $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));

        $helper = new HelperForm();
        $helper->show_toolbar = false;
        $helper->table = $this->table;
        $helper->default_form_language = $lang->id;
        $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
        $helper->identifier = $this->identifier;
        $helper->submit_action = 'submitBlockRss';
        $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name;
        $helper->token = Tools::getAdminTokenLite('AdminModules');
        $helper->tpl_vars = array(
            'fields_value' => $this->getConfigFieldsValues(),
            'languages' => $this->context->controller->getLanguages(),
            'id_language' => $this->context->language->id
        );

        return $helper->generateForm(array($fields_form));
    }

    public function getConfigFieldsValues()
    {
        return array(
            'RSS_FEED_TITLE' => Tools::getValue('RSS_FEED_TITLE', Configuration::get('RSS_FEED_TITLE')),
            'RSS_FEED_URL' => Tools::getValue('RSS_FEED_URL', Configuration::get('RSS_FEED_URL')),
            'RSS_FEED_NBR' => Tools::getValue('RSS_FEED_NBR', Configuration::get('RSS_FEED_NBR')),
        );
    }
}

Das ist die Datei ps_rssfeed.php

Share this post


Link to post
Share on other sites
vor 19 Stunden schrieb bgbruehl:

Dann wird ja alles doppelt in Google indexiert!

Na, wenn dem so wäre, gäbe es generell wohl viele Probleme (nofollow, rel canonical, 301,....😉)

Aber selbstverständlich solltest du diese Sonderkategorie für normale Benutzer unsichtbar machen.

Du legst eine neue Kundengruppe "RSS" an und weist die Sonderkategorie dieser und nur dieser Kundengruppe zu.

Grüsse
Whiley

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More