3章 オブジェクトとプロパティ

Chapter 3. Objects and properties

3.1. はじめに

3.1. Introduction

オブジェクトの参照

表の中に[objectname]を見つけたときは常に、プロパティはobjectnameのオブジェクトからのプロパティを持ったオブジェクト”objectname”であるという意味である。objecttypeを定義する必要はない。

Reference to objects:

Whenever you see ->[objectname] in the tables it means that the property is an object "objectname" with properties from object objectname. You don't need to define the objecttype.

計算値 (+calc):

時として、データタイプは”something +calc”に設定されていることがある。”+calc”は値が”+ -/*”で計算されているということである。オペレータには荷重がないということを知っておかなければならない。計算はオペレータの順に行われる。

例:

45 + 34 * 2 = 158 (これは通常の計算と同じである:(45 + 34)*2=158)

Calculating values (+calc):

Sometimes a datatype is set to "something +calc". "+calc" indicates that the value is calculated with "+-/*". Be aware that the operators has no "weight". The calculation is done in the order of the operators.

Example:

45 + 34 * 2  = 158(which is the same as this is ordinary arithmetic: (45+34)*2=158 )

“…/stdWrap”:

データタイプが”type/stdWrap”に設定されている時、パラメータとしての値のプロパティを持ったstdWrap関数を通して値は解析されているという意味である。

例:

pixels /stdWrap: ここでは値はピクセルに設定され、stdWrapを通して解析されなければならない。
実際のアプリケーションでは、以下のように実行できる:
.pixels.field = imagewidth
.pixels.intval = 1
この例では、進行中の$cObj->data-arrayの”imagewidht”フィールドからの値をインポートする。しかし、整数ででた結果を信用していないので、intval( )-functionを通して解析する。

"... /stdWrap":

When a datatype is set to "type /stdWrap" it means that the value is parsed through the stdWrap function with the properties of the value as parameters.

Example:

pixels /stdWrap:Here the value should be set to pixels and parsed through stdWrap.

In a real application we could do like this:

.pixels.field = imagewidth
.pixels.intval = 1

This example imports the value from the field "imagewidht" of the current $cObj->data-array. But we don't trust the result to be an integer so we parse it through the the intval()-function.

optionSplit:

optionSplitは非常に扱いにくい関数である。それは主として、一度に大量のアイテムのプロパティを定義するところで、menu-objectsに使われる。ここではプロパティの値は、例えば、あなたが最後のメニューアイテムだけ違った色で表すというったような設定をしていたらそれに応じて、この関数を通して解析される。
シンタックスは次の通りである:
|*|- splits the value in parts first, middle, last.
||- splits each of the first, middle, last in subparts
1.    優先順位はlast,middle,lastである。
2.    もし中央値が空(“”)の場合、第1値の最後の部分が繰り返される。
3.    もし第一もしくは中央値が空の場合、最終値の最初の部分が最終値の前に繰り返される。
4.    中央値が循環する。
例:first1 || first2 |*| middle1 || middle2 || middle3  |*| last1 || last 2

例:

これはとても複雑で、度を越していると思われるかもしれないが、実際は役に立つ。
5つのアイテムを持ったメニューを考えてみる:
はじめに
わたしたちについて
業務内容
連絡先
リンク
…そして次のようなコンフィグレーション(最初のページのexample-codeから引っ張ってきた)
temp.topmenu.1.NO {
  backColor = red
  ....
}
もしあなたがGMENU-objectのlinkWrap-propertyでこのリファレンスを見ている(今後見る)なら、.NOのプロパティはすべてoptionSpritを通して解析されるということがわかるであろう。すなわち、個々のメニューアイテムが作成される前に、プロパティはこの関数によって分割されるということである。さて例をいくつか見てみよう:

Subparts   ||
例:

すべてのアイテムは同じ値を取る。最初の部分だけが定義され、そしてすべての要素に繰り返される。
TS:backColor = red
はじめに (赤)
わたしたちについて(赤)
業務内容 (赤)
連絡先 (赤)
リンク (赤)

例:

ここでは最初の部分がsubpartに分割されている。メニューは5アイテム持っているので、第3subpartは繰り返される。
TS:backColor = red || yellow || green
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
業務内容 (緑色) first, subpart 3
連絡先 (緑色) first, subpart 3 (繰り返し)
リンク (緑色) first, subpart 3 (繰り返し)

Parts   |*|
例:

ここでは中央値もまた定義されている(“white”)。これは最初の2つのメニューアイテムの後、中央値が使われるとういうことである。
TS: backColor = red || yellow |*| white
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
業務内容 (白色) middle
連絡先 (白色) middle
リンク (白色) middle

例:

ここでは最終値もまた定義されている("blue || olive")。これは最初の2つのメニューアイテムの後、中央値が使われるということである。
TS: backColor = red || yellow |*| white |*| blue || olive
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
業務内容 (白色) middle
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2
…そしてもしメニューが少し拡張されるなら(中央値が繰り返される!)
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
業務内容 (白色) middle
…. (白色) middle
…. (白色) middle
…. (白色) middle
…. (白色) middle
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2
…そしてもしメニューを4アイテムだけにするのであれば(中央値は優先順位が最小になるようにdiscartされる)
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2
…そしてもしメニューをわずか3アイテムだけにすると(第1値の最後のsubapartはその優先順位が最終値より小さくなるようにdiscartされる)
はじめに (赤色) first, subpart 1
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2

"1:優先順位はlast, first, middle“

last, first, middle”
最後の2つの例は最終値は一番高い優先順位を持ち、次に第1値、そして次に中央値となることを表している。

"2:中央値が空の場合、第一値の最後の部分が繰り返される“

middle

例:

中央値がここでは除外されている。そして第1値のsubpart 2が繰り返される。2つの|*||*|の間にはスペースが入ってはいけないということを注意して見る!
TS: backColor = red || yellow |*||*| blue || olive
はじめに (赤色) first, subpart 1
わたしたちについて (黄色) first, subpart 2
業務内容 (黄色) first, subpart 2 (繰り返し)
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2

"3:もし第1もしくは中央値が空だったら、最終値の最初の部分が最終値の前に繰り返される“

firstmiddle

例:

中央値と第1値がここでは除外されている。そして最終値のsubpart 1が繰り返される。2つの|*||*|の間にはスペースが入ってはいけないということを注意して見る!
TS: backColor =  |*||*| blue || olive
はじめに (青色) last, subpart 1 (繰り返し)
わたしたちについて (青色) last, subpart 1 (繰り返し)
業務内容 (青色) last, subpart 1 (繰り返し)
連絡先 (青色) last, subpart 1
リンク (オリーブ) last, subpart 2

"4:中央値が循環する“

middle

例:

TS: backColor = red |*| yellow || green |*|
はじめに (赤色) first
わたしたちについて (黄色) middle, subpart 1
業務内容 (緑色) middle, subpart 2
…   (黄色)          middle, subpart 1
… (緑色) middle, subpart 2
… (黄色) middle, subpart 1
… (緑色) middle, subpart 2
連絡先 (黄色) middle, subpart 1
リンク (緑色) middle, subpart 2

optionSplit:

optionSplit is a very tricky function. It's primarily used in the menu-objects where you define properties of a whole bunch of items at once. Here the value of properties would be parsed through this function an depending on your setup you could eg. let the last menu-item appear with another color than the other.

The syntax is like this:

|*|- splits the value in parts first, middle, last.

||- splits each of the first, middle, last in subparts

  1. The priority is last, first, middle.

  2. If the middle-value is empty (""), the last part of the first-value is repeated.

  3. If the first- or middle value is empty, the first part of the last-value is repeated before the last value

  4. The middle value is rotated.

ex:  first1 || first2 |*| middle1 || middle2 || middle3  |*| last1 || last 2

Examples:

This is very complex and you might think that this has gone too far. But it's actually usefull.

Now consider a menu with five items:

Introduction

Who are we?

Business

Contact

Links

... and a configuration like this (taken from the example-code on the first pages):

temp.topmenu.1.NO {
  backColor = red
  ....
}

If you look in this reference (see later) at the linkWrap-property of the GMENU-object, you'll discover that all properties of .NO is parse through optionSplit. This means that before the individual menuitems are generated, the properties are split by this function. Now lets look at some examples:

Subparts   ||
Example:

All items take on the same value. Only the first-part is defined and thus it's repeated to all elements

TS:backColor = red

Introduction(red)

Who are we?(red)

Business(red)

Contact(red)

Links(red)

Example:

Here the first-part is split into subparts. The third subpart is repeated because the menu has five items.

TS:backColor = red || yellow || green

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Business(green)first, subpart 3

Contact(green)first, subpart 3 (repeated)

Links(green)first, subpart 3 (repeated)

Parts   |*|
Example:

Now a middle-value is also defined ("white"). This means that after the first two menu-items the middle-value is used.

TS:backColor = red || yellow |*| white

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Business(white)middle

Contact(white)middle

Links(white)middle

Example:

Now a last-value is also defined ("blue || olive"). This means that after the first two menu-items the middle-value is used.

TS:backColor = red || yellow |*| white |*| blue || olive

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Business(white)middle

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

... and if we expand the menu a bit (middle-value is repeated!)

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Business(white)middle

....(white)middle

....(white)middle

....(white)middle

....(white)middle

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

... and if we contract the menu to only four items (the middle-value is discarted as it's priority is the least)

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

... and if we contract the menu to only 3 items (the last subpart of the first-value is discarted as it's priority is less than the last-value)

Introduction(red)first, subpart 1

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

"1: The priority is last, first, middle"

last, first, middle"

Now the last two examples showed that the last-value has the highest priority, then the first-value and then the middle-value.

"2: If the middle-value is empty, the last part of the first-value is repeated"

middle

Example:

The middle-value is left out now. Then subpart 2 of the first value is repeated. Please observe that no space must exist between the two |*||*|!

TS:backColor = red || yellow |*||*| blue || olive

Introduction(red)first, subpart 1

Who are we?(yellow)first, subpart 2

Business(yellow)first, subpart 2 (repeated)

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

"3: If the first- or middle value is empty, the first part of the last-value is repeated before the last value"

firstmiddle

Example:

The middle-value and first-value is left out now. Then the subpart 1 of the last value is repeated. Please observe that no space must exist between the two |*||*|!

TS:backColor =  |*||*| blue || olive

Introduction(blue)last, subpart 1 (repeated)

Who are we?(blue)last, subpart 1 (repeated)

Business(blue)last, subpart 1 (repeated)

Contact(blue)last, subpart 1

Links(olive)last, subpart 2

"4: The middle value is rotated"

middle

Example:
TS:backColor = red |*| yellow || green |*| 

Introduction(red)first

Who are we?(yellow)middle, subpart 1

Business(green)middle, subpart 2

....(yellow)middle, subpart 1

....(green)middle, subpart 2

....(yellow)middle, subpart 1

....(green)middle, subpart 2

Contact(yellow)middle, subpart 1

Links(green)middle, subpart 2