web-dev-qa-db-ja.com

ラッパーURLにパラメーターを渡す-Joomla3.x

Joomla呼び出しURLからラッパーiframe URLにパラメーターを渡す必要があります。

私はこれを行うことができるかどうかを見て回り、このスレッドを見つけました https://stackoverflow.com/questions/12200934/pass-value-in-url-to-wrapped-url-in-joomla- 2-5 J2.5バージョンの場合、コアラッパーファイルをカスタマイズしてこれを実現することをお勧めします

Find $url = $params->def('url', '');

Then add the following after it (as outlined in Abid's link)

foreach ($_GET as $key => $value) {
  if ($key<>"option" && $key<>"Itemid") {
    $url.=(strpos($url,"?")) ? "&" : "?";
    $url.="$key=$value";
  }
}

つまり、呼び出し元のURLを解析し、それにparamsを追加しています

しかし、コアをカスタマイズすることは一般的に悪い考えです。テンプレートのオーバーライドを使用して同じ結果を達成できるかどうか疑問に思っていましたか?

/html/com_wrapper/wrapper/default.phpからオーバーライドを作成しました

そこにiframeコードは次のとおりです。

<iframe <?php echo $this->wrapper->load; ?>
    id="blockrandom"
    name="iframe"
    src="<?php echo $this->escape($this->wrapper->url); ?>"
    width="<?php echo $this->escape($this->params->get('width')); ?>"
    height="<?php echo $this->escape($this->params->get('height')); ?>"
    scrolling="<?php echo $this->escape($this->params->get('scrolling')); ?>"
    frameborder="<?php echo $this->escape($this->params->get('frameborder', 1)); ?>"
    class="wrapper<?php echo $this->pageclass_sfx; ?>">
    <?php echo JText::_('COM_WRAPPER_NO_IFRAMES'); ?>
</iframe>

それで、同じforeachロジックをこのコードに追加することは可能ですか?

そしてそれはうまくいくでしょうか?

1
Feargal Hogan

ロジックをdefault.phpに書き込むだけです。

<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_wrapper
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;
JHtml::_('script', 'com_wrapper/iframe-height.min.js', array('version' => 'auto', 'relative' => true));

$app    = JFactory::getApplication();
$params = $app->getParams();

$wrapper = new stdClass;

// Auto height control
if ($params->def('height_auto'))
{
        $wrapper->load = 'onload="iFrameHeight()"';
}
else
{
        $wrapper->load = '';
}

$url = $params->def('url', '');

foreach ($_GET as $key => $value) {
  if ($key<>"option" && $key<>"Itemid") {
    $url.=(strpos($url,"?")) ? "&" : "?";
    $url.="$key=$value";
  }
}

if ($params->def('add_scheme', 1))
{
        // Adds 'http://' or 'https://' if none is set
        if (strpos($url, '//') === 0)
        {
                // URL without scheme in component. Prepend current scheme.
                $wrapper->url = JUri::getInstance()->toString(array('scheme')) . substr($url, 2);
        }
        elseif (strpos($url, '/') === 0)
        {
                // Relative URL in component. Use scheme + Host + port.
                $wrapper->url = JUri::getInstance()->toString(array('scheme', 'Host', 'port')) . $url;
        }
        elseif (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0)
        {
                // URL doesn't start with either 'http://' or 'https://'. Add current scheme.
                $wrapper->url = JUri::getInstance()->toString(array('scheme')) . $url;
        }
        else
        {
                // URL starts with either 'http://' or 'https://'. Do not change it.
                $wrapper->url = $url;
        }
}
else
{
        $wrapper->url = $url;
}

$this->params        = &$params;
$this->wrapper       = &$wrapper;

?>
<div class="contentpane<?php echo $this->pageclass_sfx; ?>">
<?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php if ($this->escape($this->params->get('page_heading'))) : ?>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            <?php else : ?>
                <?php echo $this->escape($this->params->get('page_title')); ?>
            <?php endif; ?>
        </h1>
    </div>
<?php endif; ?>
<iframe <?php echo $this->wrapper->load; ?>
    id="blockrandom"
    name="iframe"
    src="<?php echo $this->escape($this->wrapper->url); ?>"
    width="<?php echo $this->escape($this->params->get('width')); ?>"
    height="<?php echo $this->escape($this->params->get('height')); ?>"
    scrolling="<?php echo $this->escape($this->params->get('scrolling')); ?>"
    frameborder="<?php echo $this->escape($this->params->get('frameborder', 1)); ?>"
    class="wrapper<?php echo $this->pageclass_sfx; ?>">
    <?php echo JText::_('COM_WRAPPER_NO_IFRAMES'); ?>
</iframe>
</div>

再度スキーマロジックが必要なく、単にparamsをURLに追加したい場合は、次のように減らすことができます。

    $url = $this->wrapper->url;
    foreach ($_GET as $key => $value) {
      if ($key<>"option" && $key<>"Itemid") {
        $url.=(strpos($url,"?")) ? "&" : "?";
        $url.="$key=$value";
      }
    }

    $this->wrapper->url = $url;
1
Dennis Heiden