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ロジックをこのコードに追加することは可能ですか?
そしてそれはうまくいくでしょうか?
ロジックを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;