it-swarm.com.de

Übergabe von Parametern an eine Wrapper-URL - Joomla3.x

Ich muss Parameter von der Joomla-Aufruf-URL an die Wrapper-Iframe-URL übergeben.

Ich habe mich umgesehen, um zu sehen, ob ich das tun kann, und habe diesen Thread gefunden https://stackoverflow.com/questions/12200934/pass-value-in-url-to-wrapped-url-in-joomla- 2-5 für die J2.5-Version, die das Anpassen der Core-Wrapper-Dateien vorschlägt, um dies zu erreichen

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";
  }
}

Das parst also die aufrufende URL und fügt die Parameter dazu hinzu

Aber das Anpassen des Kerns ist im Allgemeinen eine schlechte Idee. Ich habe mich gefragt, ob es möglich sein könnte, dasselbe Ergebnis mit einer Vorlagenüberschreibung zu erzielen.

Ich habe eine Überschreibung von /html/com_wrapper/wrapper/default.php erstellt

Darin lautet der iframe-Code wie folgt:

<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>

Ist es also möglich, dieselbe foreach-Logik in diesen Code einzufügen?

Und würde es funktionieren?

1
Feargal Hogan

Ich würde einfach die Logik in die default.php schreiben:

<?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>

Wenn Sie die Schema-Logik nicht mehr benötigen und nur die Parameter zur URL hinzufügen möchten, können Sie sie auf Folgendes reduzieren:

    $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