Documentation
Version 9 (Armin Ruediger Vieweg, 2012-03-15 18:10)
| 1 | 1 | h1. Documentation |
|
|---|---|---|---|
| 2 | 5 | Armin Ruediger Vieweg | |
| 3 | 5 | Armin Ruediger Vieweg | {{>toc}} |
| 4 | 1 | ||
| 5 | 1 | h2. Installation |
|
| 6 | 1 | ||
| 7 | 1 | Just install the extension and include the "static setup":http://forge.typo3.org/projects/extension-sprite/repository/entry/trunk/Configuration/TypoScript/setup.txt to your template. |
|
| 8 | 1 | ||
| 9 | 2 | Armin Ruediger Vieweg | h2. Configuration tutorial |
| 10 | 1 | ||
| 11 | 1 | h3. Create my first sprite |
|
| 12 | 1 | ||
| 13 | 1 | It is very easy to setup the first sprite. Just create a folder and put some images in there, then use this snippet: |
|
| 14 | 1 | <pre><code> page.5 < lib.sprite_generator |
|
| 15 | 1 | page.5.userFunc { |
|
| 16 | 1 | name = whatever |
|
| 17 | 1 | directories.10 = fileadmin/templates/images/sprite/ |
|
| 18 | 1 | }</code></pre> |
|
| 19 | 1 | ||
| 20 | 1 | Set a unique name, which will be used as prefix for sprite classes. In this example the spriteclass will look like: tx-sprite-whatever-imagename. |
|
| 21 | 1 | You can define several directories, so it is used like an array (.10, .20, ...). |
|
| 22 | 1 | ||
| 23 | 1 | You need to assign the user-function call to the page node. Then the sprite will be created and the css file will attached to headerData. |
|
| 24 | 1 | ||
| 25 | 1 | ||
| 26 | 1 | h3. Use my first sprite |
|
| 27 | 1 | ||
| 28 | 1 | Now we have a cool sprite, but of course we want to use it in our template. Instead using the IMAGE cObject we use this: |
|
| 29 | 1 | <pre><code> lib.logo < lib.spriteImage |
|
| 30 | 1 | lib.logo.params = class="tx-sprite-whatever tx-sprite-whatever-logo" alt="The optional alt tag" |
|
| 31 | 1 | </code></pre> |
|
| 32 | 1 | ||
| 33 | 1 | We need to define two classes: |
|
| 34 | 1 | # The class of the sprite, which contains the image |
|
| 35 | 1 | # The class of the sprite part we want to show. It contains the automatic calculated background positions and the width and height of our image |
|
| 36 | 1 | ||
| 37 | 1 | This example tells us, that there exists an image _logo.png_ in the specified _fileadmin/templates/images/sprite/_ directory. The name of the image (without extension) will be taken as last part of the sprite classname. |
|
| 38 | 2 | Armin Ruediger Vieweg | |
| 39 | 2 | Armin Ruediger Vieweg | The html output will be: |
| 40 | 2 | Armin Ruediger Vieweg | <pre><code class="html"><img src="typo3conf/ext/sprite/Resources/Public/Images/blank.gif" alt="The optional alt tag" class="tx-sprite-whatever tx-sprite-whatever-logo"></code></pre> |
| 41 | 2 | Armin Ruediger Vieweg | |
| 42 | 2 | Armin Ruediger Vieweg | The sprite extension provides its own blank.gif (also known as spacer). |
| 43 | 2 | Armin Ruediger Vieweg | |
| 44 | 2 | Armin Ruediger Vieweg | h3. Fill my sprite |
| 45 | 2 | Armin Ruediger Vieweg | |
| 46 | 2 | Armin Ruediger Vieweg | You've got several possibilities to define which images should be part of the sprite: |
| 47 | 2 | Armin Ruediger Vieweg | # *directories* (array): An array of directories which contain images. The images will not be loaded recursive. |
| 48 | 2 | Armin Ruediger Vieweg | # *files* (array): The same like directories, but you have to enter files. Files will be checked if they exist. |
| 49 | 2 | Armin Ruediger Vieweg | # *files* (string): You can also assign a string to the files property, which should contains the filenames comma separated. |
| 50 | 2 | Armin Ruediger Vieweg | |
| 51 | 2 | Armin Ruediger Vieweg | *Super flexibility:* |
| 52 | 2 | Armin Ruediger Vieweg | You can add typoscript instead of fixed paths. This makes it incredible flexible. One of the possibilities is the creation of a website-wide-sprite. That means a sprite which contains all used images (tt_content) on the entire website. Lower in the documentation you'll find a typoscript which creates such a sprite and replaces all tt_content outputs with the sprites. This is not always useful - you have to decide yourself if it is useful to you. |
| 53 | 3 | Armin Ruediger Vieweg | |
| 54 | 3 | Armin Ruediger Vieweg | h3. Use my sprite dynamically |
| 55 | 3 | Armin Ruediger Vieweg | |
| 56 | 3 | Armin Ruediger Vieweg | There exists a *lib.dynamicSpriteImage* which makes it a bit more dynamic to output sprite images. |
| 57 | 3 | Armin Ruediger Vieweg | <pre><code>10 < lib.dynamicSpriteImage |
| 58 | 3 | Armin Ruediger Vieweg | 10.10.class.cObject = RECORDS |
| 59 | 3 | Armin Ruediger Vieweg | 10.10.class.cObject { |
| 60 | 3 | Armin Ruediger Vieweg | source.field = pid |
| 61 | 3 | Armin Ruediger Vieweg | tables = pages |
| 62 | 3 | Armin Ruediger Vieweg | conf.pages = TEXT |
| 63 | 3 | Armin Ruediger Vieweg | conf.pages.field = abstract |
| 64 | 3 | Armin Ruediger Vieweg | stdWrap.wrap = tx-sprite-whatever tx-sprite-whatever-section-| |
| 65 | 3 | Armin Ruediger Vieweg | }</code></pre> |
| 66 | 3 | Armin Ruediger Vieweg | |
| 67 | 3 | Armin Ruediger Vieweg | This will output (if the current page got the section "company"): |
| 68 | 3 | Armin Ruediger Vieweg | <pre><code class="html"><img src="typo3conf/ext/sprite/Resources/Public/Images/blank.gif" alt="" class="tx-sprite-whatever tx-sprite-whatever-section-company"></code></pre> |
| 69 | 3 | Armin Ruediger Vieweg | |
| 70 | 3 | Armin Ruediger Vieweg | h2. Configuration |
| 71 | 3 | Armin Ruediger Vieweg | |
| 72 | 6 | Armin Ruediger Vieweg | _lib.sprite_generator.userFunc._ |
| 73 | 6 | Armin Ruediger Vieweg | |
| 74 | 6 | Armin Ruediger Vieweg | |*Attribute*|*Type*|*Default*|*Description*| |
| 75 | 6 | Armin Ruediger Vieweg | |name|string|mysprite|This name takes part of the sprite css classes and the filenames of css and image files. If you insert several sprites, it is necessary to keep them unique.| |
| 76 | 6 | Armin Ruediger Vieweg | |directories|array|_emtpy_|Each image containing in the given directories are used for the sprite. If you define several directories, the image filenames must be unique.| |
| 77 | 6 | Armin Ruediger Vieweg | |files|array/string|_emtpy_|Adds imagefiles to the sprite, can be used addionally to directories. You can define an array, like directories or add the files as comma separated string. Each file must contain the path, related to your htdocs. Example /fileadmin/images/myimage.png| |
| 78 | 6 | Armin Ruediger Vieweg | |linkCssFiles|boolean|1|Adds the css file with sprite classes to headerData. If false, just the files will be created but not linked.| |
| 79 | 6 | Armin Ruediger Vieweg | |useJpg|boolean|0|Normally sprites are existing out of gif and png files. But there are some situations where it is useful to combine jpg images. If this flag is true the output of sprite is jpg. It is strongly recommended that the input images are jpg too.| |
| 80 | 6 | Armin Ruediger Vieweg | |iconSpace|integer|2|Pixels between the single images in spriteimage.| |
| 81 | 8 | Armin Ruediger Vieweg | |includeTimestampInCSS|boolean|false|If true a unixtimestamp are append to spriteimage background definition in css file.| |
| 82 | 6 | Armin Ruediger Vieweg | |
| 83 | 3 | Armin Ruediger Vieweg | |
| 84 | 3 | Armin Ruediger Vieweg | h2. The whole website sprite |
| 85 | 3 | Armin Ruediger Vieweg | |
| 86 | 9 | Armin Ruediger Vieweg | The following two snippets shows how to create a sprite image for all inserted images on all pages of your website. The first shows how to collect the informations and assign them to the sprite extension and the second shows how to replace the default image output with the sprite output (blank.gif image and css classes). |
| 87 | 9 | Armin Ruediger Vieweg | |
| 88 | 9 | Armin Ruediger Vieweg | The script has not been optimized yet. It just works. |
| 89 | 9 | Armin Ruediger Vieweg | |
| 90 | 3 | Armin Ruediger Vieweg | h3. Creating the sprite |
| 91 | 3 | Armin Ruediger Vieweg | |
| 92 | 3 | Armin Ruediger Vieweg | <pre> |
| 93 | 3 | Armin Ruediger Vieweg | # get all page uids (comma separated) |
| 94 | 3 | Armin Ruediger Vieweg | lib.page_uids = CONTENT |
| 95 | 3 | Armin Ruediger Vieweg | lib.page_uids { |
| 96 | 3 | Armin Ruediger Vieweg | table = pages |
| 97 | 1 | select { |
|
| 98 | 9 | Armin Ruediger Vieweg | pidInList = 1 |
| 99 | 3 | Armin Ruediger Vieweg | recursive = 9 |
| 100 | 3 | Armin Ruediger Vieweg | } |
| 101 | 3 | Armin Ruediger Vieweg | renderObj = COA |
| 102 | 3 | Armin Ruediger Vieweg | renderObj { |
| 103 | 3 | Armin Ruediger Vieweg | 10 = TEXT |
| 104 | 3 | Armin Ruediger Vieweg | 10 { |
| 105 | 3 | Armin Ruediger Vieweg | field = uid |
| 106 | 3 | Armin Ruediger Vieweg | stdWrap.wrap = |, |
| 107 | 1 | } |
|
| 108 | 1 | } |
|
| 109 | 1 | } |
|
| 110 | 3 | Armin Ruediger Vieweg | |
| 111 | 9 | Armin Ruediger Vieweg | # get all images as comma separated files with full paths |
| 112 | 9 | Armin Ruediger Vieweg | lib.overallSprite = CONTENT |
| 113 | 9 | Armin Ruediger Vieweg | lib.overallSprite { |
| 114 | 3 | Armin Ruediger Vieweg | table = tt_content |
| 115 | 3 | Armin Ruediger Vieweg | select { |
| 116 | 3 | Armin Ruediger Vieweg | pidInList.stdWrap.cObject < lib.page_uids |
| 117 | 3 | Armin Ruediger Vieweg | recursive = 9 |
| 118 | 3 | Armin Ruediger Vieweg | andWhere = image IS NOT NULL |
| 119 | 3 | Armin Ruediger Vieweg | } |
| 120 | 3 | Armin Ruediger Vieweg | renderObj = COA |
| 121 | 3 | Armin Ruediger Vieweg | renderObj { |
| 122 | 3 | Armin Ruediger Vieweg | 30 < tt_content.image.20 |
| 123 | 3 | Armin Ruediger Vieweg | } |
| 124 | 3 | Armin Ruediger Vieweg | stdWrap { |
| 125 | 3 | Armin Ruediger Vieweg | HTMLparser.tags.img.allowedAttribs = src |
| 126 | 3 | Armin Ruediger Vieweg | split { |
| 127 | 3 | Armin Ruediger Vieweg | token = > |
| 128 | 3 | Armin Ruediger Vieweg | cObjNum = 1 |
| 129 | 3 | Armin Ruediger Vieweg | 1 = TEXT |
| 130 | 3 | Armin Ruediger Vieweg | 1.current = 1 |
| 131 | 3 | Armin Ruediger Vieweg | 1.stdWrap.split { |
| 132 | 3 | Armin Ruediger Vieweg | token = " |
| 133 | 3 | Armin Ruediger Vieweg | cObjNum = 1 |
| 134 | 3 | Armin Ruediger Vieweg | returnKey = 1 |
| 135 | 3 | Armin Ruediger Vieweg | 1.current = 1 |
| 136 | 3 | Armin Ruediger Vieweg | } |
| 137 | 3 | Armin Ruediger Vieweg | 1.wrap = |, |
| 138 | 3 | Armin Ruediger Vieweg | } |
| 139 | 3 | Armin Ruediger Vieweg | } |
| 140 | 3 | Armin Ruediger Vieweg | } |
| 141 | 3 | Armin Ruediger Vieweg | </pre> |
| 142 | 3 | Armin Ruediger Vieweg | |
| 143 | 3 | Armin Ruediger Vieweg | h3. Replacing all tt_content images with sprites |
| 144 | 1 | ||
| 145 | 3 | Armin Ruediger Vieweg | <pre> |
| 146 | 3 | Armin Ruediger Vieweg | page.1331568638 < lib.sprite_generator |
| 147 | 3 | Armin Ruediger Vieweg | page.1331568638.userFunc { |
| 148 | 3 | Armin Ruediger Vieweg | name = overall |
| 149 | 9 | Armin Ruediger Vieweg | files < lib.overallSprite |
| 150 | 3 | Armin Ruediger Vieweg | useJpg = 1 |
| 151 | 3 | Armin Ruediger Vieweg | } |
| 152 | 3 | Armin Ruediger Vieweg | |
| 153 | 3 | Armin Ruediger Vieweg | tt_content.image.20.1 { |
| 154 | 3 | Armin Ruediger Vieweg | stdWrap { |
| 155 | 3 | Armin Ruediger Vieweg | HTMLparser.tags.img.allowedAttribs = src |
| 156 | 3 | Armin Ruediger Vieweg | split { |
| 157 | 3 | Armin Ruediger Vieweg | token = > |
| 158 | 3 | Armin Ruediger Vieweg | cObjNum = 1 |
| 159 | 3 | Armin Ruediger Vieweg | 1 = TEXT |
| 160 | 3 | Armin Ruediger Vieweg | 1.current = 1 |
| 161 | 3 | Armin Ruediger Vieweg | 1.stdWrap.split { |
| 162 | 3 | Armin Ruediger Vieweg | token = " |
| 163 | 3 | Armin Ruediger Vieweg | cObjNum = 1 || 2 |
| 164 | 3 | Armin Ruediger Vieweg | |
| 165 | 3 | Armin Ruediger Vieweg | 2 = TEXT |
| 166 | 3 | Armin Ruediger Vieweg | 2.current = 1 |
| 167 | 3 | Armin Ruediger Vieweg | 2.split { |
| 168 | 3 | Armin Ruediger Vieweg | token = / |
| 169 | 3 | Armin Ruediger Vieweg | cObjNum = 1 || 2 || 3 |
| 170 | 3 | Armin Ruediger Vieweg | |
| 171 | 3 | Armin Ruediger Vieweg | 3 = TEXT |
| 172 | 3 | Armin Ruediger Vieweg | 3.current = 1 |
| 173 | 3 | Armin Ruediger Vieweg | 3.split { |
| 174 | 3 | Armin Ruediger Vieweg | token = . |
| 175 | 3 | Armin Ruediger Vieweg | cObjNum = 1 || 2 |
| 176 | 3 | Armin Ruediger Vieweg | |
| 177 | 3 | Armin Ruediger Vieweg | 1 = COA |
| 178 | 3 | Armin Ruediger Vieweg | 1 { |
| 179 | 3 | Armin Ruediger Vieweg | 10 = LOAD_REGISTER |
| 180 | 3 | Armin Ruediger Vieweg | 10.spriteclass.cObject = TEXT |
| 181 | 3 | Armin Ruediger Vieweg | 10.spriteclass.cObject.current = 1 |
| 182 | 3 | Armin Ruediger Vieweg | |
| 183 | 3 | Armin Ruediger Vieweg | 20 < lib.spriteImage |
| 184 | 3 | Armin Ruediger Vieweg | 20.params = class="tx-sprite-overall tx-sprite-overall-{register:spriteclass}" |
| 185 | 3 | Armin Ruediger Vieweg | 20.params.insertData = 1 |
| 186 | 3 | Armin Ruediger Vieweg | } |
| 187 | 3 | Armin Ruediger Vieweg | } |
| 188 | 3 | Armin Ruediger Vieweg | } |
| 189 | 1 | } |
|
| 190 | 1 | } |
|
| 191 | 1 | } |
|
| 192 | 1 | } |
|
| 193 | 1 | </pre> |
|
| 194 | 9 | Armin Ruediger Vieweg | |
| 195 | 9 | Armin Ruediger Vieweg | h3. Create one sprite for every site (haha, a rime^^) |
| 196 | 9 | Armin Ruediger Vieweg | |
| 197 | 9 | Armin Ruediger Vieweg | The script above shows you how to create one sprite for the entire website, but maybe you want to create one sprite for one page, not for all pages. |
| 198 | 9 | Armin Ruediger Vieweg | Then you have to find this part: |
| 199 | 9 | Armin Ruediger Vieweg | |
| 200 | 9 | Armin Ruediger Vieweg | <pre>lib.overallSprite { |
| 201 | 9 | Armin Ruediger Vieweg | table = tt_content |
| 202 | 9 | Armin Ruediger Vieweg | select { |
| 203 | 9 | Armin Ruediger Vieweg | pidInList.stdWrap.cObject < lib.page_uids |
| 204 | 9 | Armin Ruediger Vieweg | } |
| 205 | 9 | Armin Ruediger Vieweg | }</pre> |
| 206 | 9 | Armin Ruediger Vieweg | |
| 207 | 9 | Armin Ruediger Vieweg | It assigns all page_uids (@lib.page_uids@). Here you have to add just the current page uid: |
| 208 | 9 | Armin Ruediger Vieweg | |
| 209 | 9 | Armin Ruediger Vieweg | <pre>lib.overallSprite { |
| 210 | 9 | Armin Ruediger Vieweg | table = tt_content |
| 211 | 9 | Armin Ruediger Vieweg | select { |
| 212 | 9 | Armin Ruediger Vieweg | pidInList.data = page:uid |
| 213 | 9 | Armin Ruediger Vieweg | } |
| 214 | 9 | Armin Ruediger Vieweg | }</pre> |
| 215 | 9 | Armin Ruediger Vieweg | |
| 216 | 9 | Armin Ruediger Vieweg | *This script is not tested yet, maybe it is okay just leave pidInList empty.* |