Copyright Footer Management

xFMafia

Administrator
Administrative
Messages
83
Reputation
104
Points
33
This is a quick and dirty tutorial for how to automatically merge all copyright footers from your products into a single line, avoiding a situation where you have 5 mods released with 5 separate lines :D

Template Modifications

Template:
PAGE_CONTAINER
Modification Key: your_namespace_copyright_footer_display
Description: Copyright Footer
Search type: PHP Callback
Find: #({{ phrase\('extra_copyright'\) }})#si
Replace: Your\Namespace\Template\Callback\Copyright::insert
Execution order: 10


Code Event Listeners

Listen to event:
app_setup
Execute callback: Your\Namespace\Listener :: appSetup
Execution order: 10
Description: App setup


PHP

/src/Your/Namespace/Listener.php

PHP:
<?php

namespace Your\Namespace;

class Listener
{
    /**
     * The product ID (in the store)
     * @var integer
     */
    protected static $_productId = 0;

    /**
     * @param \XF\App $app
     */
    public static function appSetup(
        \XF\App $app
    )
    {
        if (!$app->offsetExists('prefix_branding_free'))
        {
            // Make sure we fetch the branding array from the application
            $branding = $app->offsetExists('prefix_branding') ? $app->prefix_branding : [];
         
            // Add productid to the array
            $branding[] = self::$_productId;
         
            // Store the branding
            $app->prefix_branding = $branding;
        }
    }
}
(Replace prefix with the vendor prefix (e.g. dbtech is ours, normally it's the "your" part of the "Your\Namespace" replacement.)

/src/Your/Namespace/Template/Callback/Copyright.php
PHP:
<?php

namespace Your\Namespace\Template\Callback;

class Copyright
{
    /**
     * @param $matches
     *
     * @return string
     */
    public static function insert($matches)
    {
        if (!isset($matches[1]))
        {
            // Clean error prevention
            return '';
        }

        /** @var \XF\App $app */
        $app = \XF::app();

        $branding = $app->offsetExists('prefix_branding') ? $app->prefix_branding : [];

        if (!count($branding) OR !is_array($branding))
        {
            // We had nothing left, another mod would have inserted the copyright footer
            return $matches[1];
        }

        // Create this long string
        $html = '<div>
            Parts of this site powered by XenForo add-ons from YourCompany&#8482;
            &copy;2011-' . date('Y') . ' <a class="u-concealed" rel="nofollow" href="https://www.yoursite.com" target="_blank">YourCompany</a>
            (<a class="u-concealed" rel="nofollow" href="https://www.yoursite.com/details.php?products=' . implode(',', $branding) . '" target="_blank">Details</a>)
        </div>';

        // Make sure we null this out
        $app->prefix_branding = [];

        return $matches[1] . $html;
    }
}
(Replace prefix with the vendor prefix (e.g. dbtech is ours, normally it's the "your" part of the "Your\Namespace" replacement. Also, replace the www.yoursite.com links with the links to your actual website. Also, replace "YourCompany" with the name of your company. Lastly, either create the details.php page that accepts product IDs as parameters to display a list of the products that site is running, or remove that entire parenthesis section altogether.)
 
Top