Skip to content

Instantly share code, notes, and snippets.

Revisions

  1. phproberto created this gist Oct 23, 2015.
    66 changes: 66 additions & 0 deletions templates\protostar\html\layouts\com_content\article\image.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    <?php
    /**
    * @package Joomla.Site
    * @subpackage Layout
    *
    * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
    * @license GNU General Public License version 2 or later; see LICENSE.txt
    */

    defined('_JEXEC') or die;

    extract($displayData);

    /**
    * Layout variables
    *
    * @var stdClass $article Article as it comes from joomla models/helpers
    * @var array $options Array with options. Available options:
    * 'resolution' : Resolution of the thumbnail
    * 'force_png' : Convert always to PNG for transparent backgrounds
    * 'force_rewrite' : Force thumbnail regeneration
    * 'thumb_method' : Method to use to create the thumbnails. See JImage
    */

    $layoutOptions = empty($options) ? new JInput : new JInput($options);

    $images = json_decode($article->images);

    // Intro image available
    if (!empty($images->image_intro))
    {
    $imageUrl = $images->image_intro;
    $imageAlt = $images->image_intro_alt;
    }
    // Full text image available
    elseif (!empty($images->image_fulltext))
    {
    $imageUrl = $images->image_fulltext;
    $imageAlt = $images->image_fulltext_alt;
    }
    // Nothing to display
    else
    {
    return;
    }

    $resolution = $layoutOptions->get('resolution', '350x250');

    // A thumbnail has been required
    if ($resolution)
    {
    $thumbUrl = JLayoutHelper::render(
    'image.thumbnail',
    array(
    'imageUrl' => $imageUrl,
    'options' => $options
    )
    );

    if ($thumbUrl)
    {
    $imageUrl = $thumbUrl;
    }
    }
    ?>
    <img src="<?php echo $imageUrl; ?>" alt="<?php echo $imageAlt; ?>" />
    95 changes: 95 additions & 0 deletions templates\protostar\html\layouts\image\thumbnail.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,95 @@
    <?php
    /**
    * @package Joomla.Site
    * @subpackage Layout
    *
    * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
    * @license GNU General Public License version 2 or later; see LICENSE.txt
    */

    defined('_JEXEC') or die;

    extract($displayData);

    /**
    * Layout variables
    *
    * @var array $imageUrl Url of the source image
    * @var array $options Array with options. Available options:
    * 'resolution' : Resolution of the thumbnail
    * 'force_png' : Convert always to PNG for transparent backgrounds
    * 'force_rewrite' : Force thumbnail regeneration
    * 'thumb_method' : Method to use to create the thumbnails. See JImage
    */

    $layoutOptions = empty($options) ? new JInput : new JInput($options);

    // Generate image path from its URL
    $imagePath = JPATH_SITE . '/' . ltrim($imageUrl, '/');

    // Cannot create the thumb
    if (!file_exists($imagePath))
    {
    echo $imageUrl;

    return;
    }

    // Layout options
    $resolution = $layoutOptions->get('resolution', '450x350');
    $forcePng = $layoutOptions->getBoolean('force_png', false);
    $rewriteThumb = $layoutOptions->getBoolean('force_rewrite', false);
    $thumbMethod = $layoutOptions->getInt('thumb_method', JImage::SCALE_INSIDE);

    $fileInfo = pathinfo($imagePath);
    $thumbPath = dirname($imagePath) . '/thumbs/' . $resolution . '/' . $fileInfo['filename'] . '.png';

    // Thumb already exists
    if (!$rewriteThumb && file_exists($thumbPath))
    {
    echo str_replace(JPATH_SITE, JUri::root(true), $thumbPath);

    return;
    }

    // Source of the png file if we have to force PNG thumbnails
    $pngPath = dirname($imagePath) . '/' . $fileInfo['filename'] . '.png';

    if ($forcePng && $fileInfo['extension'] != 'png' && !file_exists($pngPath))
    {
    $pngImage = imagecreatefromstring(file_get_contents($imagePath));
    imagepng($pngImage, $pngPath);
    $jimage = new JImage($pngPath);
    }
    else
    {
    $jimage = new JImage($imagePath);
    }

    try
    {
    $thumbs = $jimage->generateThumbs(array($resolution));
    }
    catch (Exception $e)
    {
    $thumbs = array();
    }

    if (!$thumbs)
    {
    echo $imageUrl;

    return;
    }

    // Try to create the thumb folder
    if (!is_dir(dirname($thumbPath)) && !mkdir(dirname($thumbPath), 0755, true))
    {
    echo $imageUrl;

    return;
    }

    $thumbs[0]->toFile($thumbPath, JImage::getImageFileProperties($jimage->getPath())->type);

    echo str_replace(JPATH_SITE, JUri::root(true), $thumbPath);
    39 changes: 39 additions & 0 deletions templates\protostar\html\layouts\joomla\content\intro_image.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    <?php
    /**
    * @package Joomla.Site
    * @subpackage Layout
    *
    * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
    * @license GNU General Public License version 2 or later; see LICENSE.txt
    */

    defined('_JEXEC') or die;

    // More descriptive name
    $article = $displayData;

    // Our article will only have a link if it's required so it's easier to check in our HTML
    if ($article->params->get('link_titles') && $article->params->get('access-view'))
    {
    $link = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language));
    }
    ?>
    <div class="item-image">
    <?php if ($link) : ?>
    <a href="<?php echo $link; ?>" class="thumbnail">
    <?php endif; ?>
    <?php
    echo JLayoutHelper::render(
    'com_content.article.image',
    array(
    'article' => $article,
    'options' => array(
    'resolution' => '450x350'
    )
    )
    )
    ?>
    <?php if ($link) : ?>
    </a>
    <?php endif; ?>
    </div>