1

シートのコンテンツ領域に新しい位置を追加しようとしています。つまり、ブログのエントリを次のようにしたいと思います。

投稿 #1 投稿 #2 投稿 #3 新しいポジション #1 投稿 #4 投稿 #5 投稿 #6 新しいポジション #2 投稿 #7 投稿 #8 投稿 #9

最終的に、これら 2 つの新しい位置はバナー広告に使用されます。

ブログは非常に動的で、記事はすぐに下にスクロールされるため、記事に位置を挿入したくありません。さらに、自動化できるものはすべて自動化する必要があります。これを行う賢い方法は、ブログ レイアウトのオーバーライドを作成することだとアドバイスされています。今、私が初心者であり、片手を鼻に縛り付け、猫を副操縦士として盲目的に飛行していることを考えると、少し道に迷ったように感じ始めています。PHP とオーバーライドについてできることはすべて読みましたが、十分ではないようです。私は Artisteer を使用してテンプレートを作成していますベーシックで派手なものはなく、ベーシックなスタイリングです。私が使用しているテンプレートは「testa4_50」と呼ばれています (ええ... 私は吸盤のバージョン 50 を使用しています... 急な学習曲線... 始めないでください....)。テスト目的で、Windoze XP で Xampp をローカルホストとして使用しています。私の Joomla の実装は 3.0.3 です Artisteer はオーバーライドを多用しているようです。

私が最初に試みたのは、ホームページの本文のどこかに新しい位置を挿入して、コードを理解しようとするかどうかを確認することでした。

私が取った手順:

1 - C:\xampp\htdocs\j303b1\templates\testa4_50\ で templateDetails.xml を見つけます。 2 - リストを見つけて、「position-new」を追加します。それは次のように見えました:

<positions>
        <position>debug</position>
        <position>position-2</position>
        <position>position-4</position>
        <position>position-5</position>
        <position>position-7</position>
        <position>position-9</position>
        <position>position-10</position>
        <position>position-11</position>
        <position>position-12</position>
        <position>position-15</position>
        <position>position-16</position>
        <position>position-17</position>
        <position>position-18</position>
        <position>position-19</position>
        <position>position-20</position>
        <position>position-21</position>
        <position>position-22</position>
        <position>position-23</position>
        <position>position-24</position>
        <position>position-25</position>
        <position>position-26</position>
        <position>position-27</position>
        <position>position-new</position>
    </positions>

3 - C:\xampp\htdocs\j303b1\templates\testa4_50\ で index.php を見つけます。 4 - 位置ブロックで正しい場所を見つけます。

<?php
  echo $view->position('position-19', 'art-nostyle');
  if ($view->containsModules('position-2'))
    echo artxPost($view->position('position-2'));
  echo $view->positions(array('position-20' => 50, 'position-21' => 50), 'art-article');
  echo $view->position('position-12', 'art-nostyle');
  echo artxPost(array('content' => '<jdoc:include type="message" />', 'classes' => ' art-messages'));
  echo '<jdoc:include type="component" />';
  echo $view->position('position-22', 'art-nostyle');
  echo $view->positions(array('position-23' => 50, 'position-24' => 50), 'art-article');
  echo $view->position('position-25', 'art-nostyle');
?>

5 - 既存のコードをコピーして新しい位置を追加します。

<?php
  echo $view->position('position-19', 'art-nostyle');
  if ($view->containsModules('position-2'))
    echo artxPost($view->position('position-2'));
  echo $view->positions(array('position-20' => 50, 'position-21' => 50), 'art-article');
  echo $view->position('position-12', 'art-nostyle');
  echo $view->position('position-new', 'art-nostyle');
  echo artxPost(array('content' => '<jdoc:include type="message" />', 'classes' => ' art-messages'));
  echo '<jdoc:include type="component" />';
  echo $view->position('position-22', 'art-nostyle');
  echo $view->positions(array('position-23' => 50, 'position-24' => 50), 'art-article');
  echo $view->position('position-25', 'art-nostyle');
?>

6 - Joomla / Preview で位置を確認します 7 - すべて正常に動作します。

それで、「echo $view->position('position-new', 'art-nostyle');」というコードを見つけました。他の場所でも動作するはずです。

さて、ブログのどこかに新しいポジションを作ってみました。

私が取った手順:

1 - \Dell-pc\xampp\htdocs\J303b1\templates\testa4_50\html\com_content\category で blog.php を見つけます (完全なファイルはこの投稿に添付されています)

2 - ファイル内の正しい場所を見つける

echo artxPost(array('header-text' => $view->pageHeading, 'content' => ob_get_clean()));

?>
<?php $leadingcount=0 ; ?>
<?php if (!empty($this->lead_items)) : ?>
<div class="items-leading">
    <?php foreach ($this->lead_items as &$item) : ?>
        <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
            <?php
                $this->item = &$item;
                echo $this->loadTemplate('item');
            ?>
        </div>
        <?php $leadingcount++; ?>
    <?php endforeach; ?>
</div>
<?php endif; ?>

3 - コードを挿入します。

echo artxPost(array('header-text' => $view->pageHeading, 'content' => ob_get_clean()));

?>
<?php echo $view->position('position-new', 'art-nostyle') ?>
<?php $leadingcount=0 ; ?>
<?php if (!empty($this->lead_items)) : ?>
<div class="items-leading">
    <?php foreach ($this->lead_items as &$item) : ?>
        <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
            <?php
                $this->item = &$item;
                echo $this->loadTemplate('item');
                echo $view->position('position-new', 'art-nostyle');
            ?>
        </div>
        <?php $leadingcount++; ?>
    <?php endforeach; ?>
</div>
<?php endif; ?>

4 - テスト = FAIL (位置がホームページのどこにも表示されない)

5 - コードを次のように変更します

そして同じ位置に挿入。テスト = 不合格。

============================ この時点で、私は困惑しています。コンテンツ領域のどこにも新しい位置を挿入できません。もともと、上記のループにこのコードを挿入することを考えていました (3 番目の投稿の後に少なくとも 1 つの新しい位置を挿入できるかどうかを確認するため):

<?php $leadingcount=0 ; ?>
<?php if (!empty($this->lead_items)) : ?>
<div class="items-leading">
    <?php foreach ($this->lead_items as &$item) : ?>
        <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
            <?php
                $this->item = &$item;
                echo $this->loadTemplate('item');
                echo $view->position('position-new', 'art-nostyle');
                If ($leadingcount==3) echo $view->position('position-new', 'art-nostyle');
            ?>
        </div>
        <?php $leadingcount++; ?>
    <?php endforeach; ?>
</div>
<?php endif; ?>

しかし、もちろん、うまくいきません。

どんな提案やアドバイスも大歓迎です!

Blog.php ファイル

<?php
defined('_JEXEC') or die;

require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'functions.php';

if ('artisteer' == JFactory::getApplication()->getTemplate(true)->params->get('blogLayoutType')) {
    require 'art_blog.php';
    return;
}

Artx::load("Artx_Content");

$view = new ArtxContent($this, $this->params);

echo $view->beginPageContainer('blog');
ob_start();
if ($this->params->get('show_category_title', 1) || strlen($this->params->get('page_subheading'))) {
    echo '<h2>';
    echo $this->escape($this->params->get('page_subheading'));
    if ($this->params->get('show_category_title') && strlen($this->category->title))
        echo '<span class="subheading-category">' . $this->category->title . '</span>';
    echo '</h2>';
}

if ($this->params->def('show_description', 1) || $this->params->def('show_description_image', 1)) {
    echo '<div class="category-desc">';
    if ($this->params->get('show_description_image') && $this->category->getParams()->get('image'))
        echo '<img src="' . $this->category->getParams()->get('image') . '" alt="" />';
    if ($this->params->get('show_description') && $this->category->description)
        echo JHtml::_('content.prepare', $this->category->description, '', 'com_content.category');
    echo '</div>';
}
echo artxPost(array('header-text' => $view->pageHeading, 'content' => ob_get_clean()));

?>
<?php echo $view->position('position-new', 'xhtml') ?>
<?php $leadingcount=0 ; ?>
<?php if (!empty($this->lead_items)) : ?>
<div class="items-leading">
    <?php foreach ($this->lead_items as &$item) : ?>
        <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
            <?php
                $this->item = &$item;
                echo $this->loadTemplate('item');
                echo $view->position('position-new', 'art-nostyle');
            ?>
        </div>
        <?php $leadingcount++; ?>
    <?php endforeach; ?>
</div>
<?php endif; ?>
<?php
    $introcount = (count($this->intro_items));
    $counter = 0;
?>
<?php if (!empty($this->intro_items)) : ?>
    <?php foreach ($this->intro_items as $key => &$item) : ?>
    <?php
        $key= ($key-$leadingcount)+1;
        $rowcount=( ((int)$key-1) % (int) $this->columns) +1;
        $row = $counter / $this->columns ;
        if ($rowcount==1) : ?>
            <div class="items-row cols-<?php echo (int) $this->columns;?> <?php echo 'row-'.$row ; ?>">
       <?php endif; ?>
    <div class="item column-<?php echo $rowcount;?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
    <?php
        $this->item = &$item;
        echo $this->loadTemplate('item');
    ?>
    </div>
        <?php $counter++; ?>
        <?php if (($rowcount == $this->columns) or ($counter ==$introcount)): ?>
    <span class="row-separator"></span>
</div>
        <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>
<?php
if (!empty($this->link_items)) {
    ob_start();
    echo '<div class="items-more">' . $this->loadTemplate('links') . '</div>';
    echo artxPost(ob_get_clean());
}
?>
<?php if (!empty($this->children[$this->category->id])&& $this->maxLevel != 0) : ?>
    <?php ob_start(); ?>
    <div class="cat-children">
        <h3><?php echo JTEXT::_('JGLOBAL_SUBCATEGORIES'); ?></h3>
        <?php echo $this->loadTemplate('children'); ?>
    </div>
    <?php echo artxPost(ob_get_clean()); ?>
<?php endif; ?>
<?php

if (($this->params->def('show_pagination', 1) == 1 || $this->params->get('show_pagination') == 2)
    && $this->pagination->get('pages.total') > 1)
{
    ob_start();
    echo '<div class="pagination">';
    if ($this->params->def('show_pagination_results', 1))
        echo '<p class="counter">' . $this->pagination->getPagesCounter() . '</p>';
    echo $this->pagination->getPagesLinks();
    echo '</div>';
    echo ob_get_clean();
}

echo $view->endPageContainer();
4

1 に答える 1

0

これは以前は Joomla 1.5 で機能し、どこでも使用できました。私はアーティストがやろうとしていることをわざわざコピーするつもりはありません。ヘルパーをインポートしてモジュールを取得するだけです。

/***************************************
* Load module in a view file*/

// import the module helper
jimport('joomla.application.module.helper');
// this is where you want to load your module position
$modules = JModuleHelper::getModules('moduleposition');
foreach($modules as $module)
{
echo JModuleHelper::renderModule($module);
}

joomla 3の場合、このようになると思います

/***************************************
* Load module in a view file*/

// import the module helper
$document   = JFactory::getDocument();
$renderer   = $document->loadRenderer('module');
// this is where you want to load your module position
$modules = JModuleHelper::getModules('moduleposition');
foreach($modules as $module)
{
echo $renderer->render($module);
}
于 2014-02-01T04:31:43.887 に答える