xoops forums

milanov

Just popping in
Posted on: 2003/12/7 22:16
milanov
milanov (Show more)
Just popping in
Posts: 10
Since: 2003/11/24
#1

News module help part2

Hi there!

I have a small problem with XOOPS and i have posted it in a lot of forums, but nobody answered to me :(

So, the problem:

I have 2 blocks in the central (middle) column, but they are always appear over the news. How to change this? I need the news on the top!

Thanks a lot :)

hsalazar

Just popping in
Posted on: 2003/12/8 0:54
hsalazar
hsalazar (Show more)
Just popping in
Posts: 78
Since: 2003/2/6 1
#2

General structure of theme.html [VERY LONG POST]

milanov:

Here's a VERY LONG answer to your question. I'll do it the long way because I want this to be a general explanation of the themes main file: theme.html. Ok? Let's begin.

The file is a structure made out of tables so that you have three different areas:

(1) A header, where you can see the XOOPS logo, the banner and, in some themes, several shortcuts to different areas of the site.

(2) A content area, which we'll leave aside for the moment.

(3) A footer area, where you can see the "Powered by" message.

Ok so far? Good. Now let's proceed to the content area. Its actual structure depends on the theme, but for this example, let's use the default theme. In this theme, the content area is built with a separate table (lines 36-106 in the file). This table has a single row, and in that row it has three columns, with obvious IDs as leftcolumn, centercolumn and rightcolumn.

Now, the first thing you'll notice is that the column called "rightcolumn" is enclosed by an IF declaration:

<{if $xoops_showrblock == 1}>

      <
td id="rightcolumn">
        <!-- 
Start right blocks loop -->
        <{foreach 
item=block from=$xoops_rblocks}>
          <{include 
file="default/theme_blockright.html"}>
        <{/foreach}>
        <!-- 
End right blocks loop -->
      </
td>

      <{/if}>


What this means is: if the variable $xoops_showrblock equals one, then there's a TD called "rightcolumn". Of course, if $xoops_showrblock equals 0, there's no TD called "rightcolumn" and our row is left with only two columns: "leftcolumn" and "centercolumn". Let's not enter in this subject for the moment; it's enough to know that somehow the right column is optional.

For the moment, we need to focus on the column called "centercolumn". I'll reproduce here the whole TD so we can dissect it:

<td id="centercolumn">

        <!-- 
Display center blocks if any -->
        <{if 
$xoops_showcblock == 1}>

        <
table cellspacing="0">
          <
tr>
            <
td id="centerCcolumn" colspan="2">

            <!-- 
Start center-center blocks loop -->
            <{foreach 
item=block from=$xoops_ccblocks}>
              <{include 
file="default/theme_blockcenter_c.html"}>
            <{/foreach}>
            <!-- 
End center-center blocks loop -->

            </
td>
          </
tr>
          <
tr>
            <
td id="centerLcolumn">

            <!-- 
Start center-left blocks loop -->
              <{foreach 
item=block from=$xoops_clblocks}>
                <{include 
file="default/theme_blockcenter_l.html"}>
              <{/foreach}>
            <!-- 
End center-left blocks loop -->

            </
td><td id="centerRcolumn">

            <!-- 
Start center-right blocks loop -->
              <{foreach 
item=block from=$xoops_crblocks}>
                <{include 
file="default/theme_blockcenter_r.html"}>
              <{/foreach}>
            <!-- 
End center-right blocks loop -->

            </
td>
          </
tr>
        </
table>

        <{/if}>
        <!-- 
End display center blocks -->

        <
div id="content">
          <{
$xoops_contents}>
        </
div>
      </
td>


Now. If you take a good look at this, you'll see two structures within the TD:

(1) A large table enclosed by an IF declaration.

(2) A DIV tag enclosing the <{$xoops_contents}> variable.

Ok so far? Let's begin with number (2). What's contained in <{$xoops_contents}>? The main content of the module presented in the page. If you have the News module as your start module, this variable contains the latest news.

This is important. If you have the MyDownloads module as your start module, this variable contains the download categories and the latest downloads. To be more clear: What you see now when you click on Downloads will appear in your top page, start page or homepage, whatever you call it. Ok?

What happens if you don't define a start module, that is, if in your admin preferences you set Module for your start page to "None"? The value of <{$xoops_contents}> is zero: you have no content assigned to the start page, and all you'll see there are the blocks you define to appear in the top page.

We're almost there, be patient. Let's go now to number (1) and examine the large table. It's enclosed in an IF, and the IF has as its parameter the variable $xoops_showcblock. If it's equal to one, the table is shown; if it has a different value, the table is NOT shown.

Who decides the value of $xoops_showcblock? It's automatically defined as soon as you select some block to appear in your top page.

Now, assume the variable equals one. What specifically is in the table shown? If you go a little back and see the code, you'll realize the table has two rows:

(1) The first row has a full-width TD called "centerCcolumn". There you'll see whatever blocks are defined as center-center.

(2) The second row has two half-width TDs. The left one is called "centerLcolumn" and the right one is called "centerRcolumn".

All these TDs are dynamically filled by XOOPS by reading arrays and supplying the content you have.

Now let's review the implications of all we've just seen.

First, whatever weight you assign to a block, has relevance within blocks of the same kind. This means if you apply a weight to a center-center block, this weight is important if you have more center-center blocks. But it won't matter with respect to center-left or center-right blocks, which will always be displayed below the center-center blocks because that's the way they're set in the template, in theme.html. So if you want your center-center blocks to appear below your center-left and center-right blocks, you need to move the center-center TR below the center-left/center-right TR. Ok?

Second, since the whole table is set BEFORE the main content DIV, it won't matter what weight you assign to your blocks: you'll NEVER get the main content appear before the center-center, center-left or center-right blocks. To make your content appear first, you have to move the DIV and put it BEFORE the table.

I call the setting of the default theme Blocks on top. If you need to have it the other way, for the configuration I call Content on top, change the code so the TD called "centercolumn" reads:

<td id="centercolumn">

        <
div id="content">
          <{
$xoops_contents}>
        </
div>

                <!-- 
Display center blocks if any -->
        <{if 
$xoops_showcblock == 1}>

        <
table cellspacing="0">
          <
tr>
            <
td id="centerCcolumn" colspan="2">

            <!-- 
Start center-center blocks loop -->
            <{foreach 
item=block from=$xoops_ccblocks}>
              <{include 
file="default/theme_blockcenter_c.html"}>
            <{/foreach}>
            <!-- 
End center-center blocks loop -->

            </
td>
          </
tr>
          <
tr>
            <
td id="centerLcolumn">

            <!-- 
Start center-left blocks loop -->
              <{foreach 
item=block from=$xoops_clblocks}>
                <{include 
file="default/theme_blockcenter_l.html"}>
              <{/foreach}>
            <!-- 
End center-left blocks loop -->

            </
td><td id="centerRcolumn">

            <!-- 
Start center-right blocks loop -->
              <{foreach 
item=block from=$xoops_crblocks}>
                <{include 
file="default/theme_blockcenter_r.html"}>
              <{/foreach}>
            <!-- 
End center-right blocks loop -->

            </
td>
          </
tr>
        </
table>

        <{/if}>
        <!-- 
End display center blocks -->

      </
td>

All this may sound complex, but if you read carefully, with your theme.html open in front of you, you'll realize it's actually quite easy and quite flexible. This is the way to control what you see in your homepage.

Well, this has been long, but I do hope it's been useful.

Cheers.

milanov

Just popping in
Posted on: 2003/12/8 1:03
milanov
milanov (Show more)
Just popping in
Posts: 10
Since: 2003/11/24
#3

Re: General structure of theme.html [VERY LONG POST]

10x a lot for the hard work! I made my page :)