Completed
Push — master ( 8b8334...2005c2 )
by Aimeos
07:11
created
client/html/src/Client/Html/Catalog/Detail/Factory.php 1 patch
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -19,69 +19,69 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Factory
22
-	extends \Aimeos\Client\Html\Common\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Factory\Iface
24 24
 {
25
-	/**
26
-	 * Creates a list client object.
27
-	 *
28
-	 * @param \Aimeos\MShop\Context\Item\Iface $context Shop context instance with necessary objects
29
-	 * @param array $templatePaths List of file system paths where the templates are stored
30
-	 * @param string|null $name Client name (default: "Standard")
31
-	 * @return \Aimeos\Client\Html\Iface Filter part implementing \Aimeos\Client\Html\Iface
32
-	 * @throws \Aimeos\Client\Html\Exception If requested client implementation couldn't be found or initialisation fails
33
-	 */
34
-	public static function createClient( \Aimeos\MShop\Context\Item\Iface $context, array $templatePaths, $name = null )
35
-	{
36
-		/** client/html/catalog/detail/name
37
-		 * Class name of the used catalog detail client implementation
38
-		 *
39
-		 * Each default HTML client can be replace by an alternative imlementation.
40
-		 * To use this implementation, you have to set the last part of the class
41
-		 * name as configuration value so the client factory knows which class it
42
-		 * has to instantiate.
43
-		 *
44
-		 * For example, if the name of the default class is
45
-		 *
46
-		 *  \Aimeos\Client\Html\Catalog\Detail\Standard
47
-		 *
48
-		 * and you want to replace it with your own version named
49
-		 *
50
-		 *  \Aimeos\Client\Html\Catalog\Detail\Mydetail
51
-		 *
52
-		 * then you have to set the this configuration option:
53
-		 *
54
-		 *  client/html/catalog/detail/name = Mydetail
55
-		 *
56
-		 * The value is the last part of your own class name and it's case sensitive,
57
-		 * so take care that the configuration value is exactly named like the last
58
-		 * part of the class name.
59
-		 *
60
-		 * The allowed characters of the class name are A-Z, a-z and 0-9. No other
61
-		 * characters are possible! You should always start the last part of the class
62
-		 * name with an upper case character and continue only with lower case characters
63
-		 * or numbers. Avoid chamel case names like "MyDetail"!
64
-		 *
65
-		 * @param string Last part of the class name
66
-		 * @since 2014.03
67
-		 * @category Developer
68
-		 */
69
-		if( $name === null ) {
70
-			$name = $context->getConfig()->get( 'client/html/catalog/detail/name', 'Standard' );
71
-		}
25
+    /**
26
+     * Creates a list client object.
27
+     *
28
+     * @param \Aimeos\MShop\Context\Item\Iface $context Shop context instance with necessary objects
29
+     * @param array $templatePaths List of file system paths where the templates are stored
30
+     * @param string|null $name Client name (default: "Standard")
31
+     * @return \Aimeos\Client\Html\Iface Filter part implementing \Aimeos\Client\Html\Iface
32
+     * @throws \Aimeos\Client\Html\Exception If requested client implementation couldn't be found or initialisation fails
33
+     */
34
+    public static function createClient( \Aimeos\MShop\Context\Item\Iface $context, array $templatePaths, $name = null )
35
+    {
36
+        /** client/html/catalog/detail/name
37
+         * Class name of the used catalog detail client implementation
38
+         *
39
+         * Each default HTML client can be replace by an alternative imlementation.
40
+         * To use this implementation, you have to set the last part of the class
41
+         * name as configuration value so the client factory knows which class it
42
+         * has to instantiate.
43
+         *
44
+         * For example, if the name of the default class is
45
+         *
46
+         *  \Aimeos\Client\Html\Catalog\Detail\Standard
47
+         *
48
+         * and you want to replace it with your own version named
49
+         *
50
+         *  \Aimeos\Client\Html\Catalog\Detail\Mydetail
51
+         *
52
+         * then you have to set the this configuration option:
53
+         *
54
+         *  client/html/catalog/detail/name = Mydetail
55
+         *
56
+         * The value is the last part of your own class name and it's case sensitive,
57
+         * so take care that the configuration value is exactly named like the last
58
+         * part of the class name.
59
+         *
60
+         * The allowed characters of the class name are A-Z, a-z and 0-9. No other
61
+         * characters are possible! You should always start the last part of the class
62
+         * name with an upper case character and continue only with lower case characters
63
+         * or numbers. Avoid chamel case names like "MyDetail"!
64
+         *
65
+         * @param string Last part of the class name
66
+         * @since 2014.03
67
+         * @category Developer
68
+         */
69
+        if( $name === null ) {
70
+            $name = $context->getConfig()->get( 'client/html/catalog/detail/name', 'Standard' );
71
+        }
72 72
 
73
-		if( ctype_alnum( $name ) === false )
74
-		{
75
-			$classname = is_string( $name ) ? '\\Aimeos\\Client\\Html\\Catalog\\Detail\\' . $name : '<not a string>';
76
-			throw new \Aimeos\Client\Html\Exception( sprintf( 'Invalid characters in class name "%1$s"', $classname ) );
77
-		}
73
+        if( ctype_alnum( $name ) === false )
74
+        {
75
+            $classname = is_string( $name ) ? '\\Aimeos\\Client\\Html\\Catalog\\Detail\\' . $name : '<not a string>';
76
+            throw new \Aimeos\Client\Html\Exception( sprintf( 'Invalid characters in class name "%1$s"', $classname ) );
77
+        }
78 78
 
79
-		$iface = '\\Aimeos\\Client\\Html\\Iface';
80
-		$classname = '\\Aimeos\\Client\\Html\\Catalog\\Detail\\' . $name;
79
+        $iface = '\\Aimeos\\Client\\Html\\Iface';
80
+        $classname = '\\Aimeos\\Client\\Html\\Catalog\\Detail\\' . $name;
81 81
 
82
-		$client = self::createClientBase( $context, $classname, $iface, $templatePaths );
82
+        $client = self::createClientBase( $context, $classname, $iface, $templatePaths );
83 83
 
84
-		return self::addClientDecorators( $context, $client, $templatePaths, 'catalog/detail' );
85
-	}
84
+        return self::addClientDecorators( $context, $client, $templatePaths, 'catalog/detail' );
85
+    }
86 86
 }
87 87
 
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Standard.php 1 patch
Indentation   +596 added lines, -596 removed lines patch added patch discarded remove patch
@@ -19,601 +19,601 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/standard/subparts';
59
-
60
-	/** client/html/catalog/detail/social/name
61
-	 * Name of the social part used by the catalog detail client implementation
62
-	 *
63
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Social\Myname".
64
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
65
-	 *
66
-	 * @param string Last part of the client class name
67
-	 * @since 2014.09
68
-	 * @category Developer
69
-	 */
70
-
71
-	/** client/html/catalog/detail/image/name
72
-	 * Name of the image part used by the catalog detail client implementation
73
-	 *
74
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Image\Myname".
75
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
76
-	 *
77
-	 * @param string Last part of the client class name
78
-	 * @since 2014.03
79
-	 * @category Developer
80
-	 */
81
-
82
-	/** client/html/catalog/detail/basic/name
83
-	 * Name of the basic part used by the catalog detail client implementation
84
-	 *
85
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basic\Myname".
86
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
87
-	 *
88
-	 * @param string Last part of the client class name
89
-	 * @since 2014.03
90
-	 * @category Developer
91
-	 */
92
-
93
-	/** client/html/catalog/detail/actions/name
94
-	 * Name of the actions part used by the catalog detail client implementation
95
-	 *
96
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Actions\Myname".
97
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
98
-	 *
99
-	 * @param string Last part of the client class name
100
-	 * @since 2014.09
101
-	 * @category Developer
102
-	 */
103
-
104
-	/** client/html/catalog/detail/basket/name
105
-	 * Name of the basket part used by the catalog detail client implementation
106
-	 *
107
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Myname".
108
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
109
-	 *
110
-	 * @param string Last part of the client class name
111
-	 * @since 2014.03
112
-	 * @category Developer
113
-	 */
114
-
115
-	/** client/html/catalog/detail/bundle/name
116
-	 * Name of the bundle part used by the catalog detail client implementation
117
-	 *
118
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Bundle\Myname".
119
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
120
-	 *
121
-	 * @param string Last part of the client class name
122
-	 * @since 2014.11
123
-	 * @category Developer
124
-	 */
125
-
126
-	/** client/html/catalog/detail/additional/name
127
-	 * Name of the additional part used by the catalog detail client implementation
128
-	 *
129
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Additional\Myname".
130
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
131
-	 *
132
-	 * @param string Last part of the client class name
133
-	 * @since 2014.03
134
-	 * @category Developer
135
-	 */
136
-
137
-	/** client/html/catalog/detail/suggest/name
138
-	 * Name of the suggest part used by the catalog detail client implementation
139
-	 *
140
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Suggest\Myname".
141
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
142
-	 *
143
-	 * @param string Last part of the client class name
144
-	 * @since 2014.03
145
-	 * @category Developer
146
-	 */
147
-
148
-	/** client/html/catalog/detail/bought/name
149
-	 * Name of the bought together part used by the catalog detail client implementation
150
-	 *
151
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Bought\Myname".
152
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
153
-	 *
154
-	 * @param string Last part of the client class name
155
-	 * @since 2014.09
156
-	 * @category Developer
157
-	 */
158
-
159
-	/** client/html/catalog/detail/seen/name
160
-	 * Name of the seen part used by the catalog detail client implementation
161
-	 *
162
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Seen\Myname".
163
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
164
-	 *
165
-	 * @param string Last part of the client class name
166
-	 * @since 2014.03
167
-	 * @category Developer
168
-	 */
169
-	private $subPartNames = array( 'image', 'basic', 'basket', 'actions', 'social', 'bundle', 'additional', 'suggest', 'bought', 'seen' );
170
-
171
-	private $tags = array();
172
-	private $expire;
173
-	private $cache;
174
-
175
-
176
-	/**
177
-	 * Returns the HTML code for insertion into the body.
178
-	 *
179
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
180
-	 * @param array &$tags Result array for the list of tags that are associated to the output
181
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
182
-	 * @return string HTML code
183
-	 */
184
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
185
-	{
186
-		$prefixes = array( 'd' );
187
-		$context = $this->getContext();
188
-
189
-		/** client/html/catalog/detail
190
-		 * All parameters defined for the catalog detail component and its subparts
191
-		 *
192
-		 * This returns all settings related to the detail component.
193
-		 * Please refer to the single settings for details.
194
-		 *
195
-		 * @param array Associative list of name/value settings
196
-		 * @category Developer
197
-		 * @see client/html/catalog#detail
198
-		 */
199
-		$confkey = 'client/html/catalog/detail';
200
-
201
-		if( $context->getUserId() != null || ( $html = $this->getCached( 'body', $uid, $prefixes, $confkey ) ) === null )
202
-		{
203
-			$view = $this->getView();
204
-
205
-			try
206
-			{
207
-				$view = $this->setViewParams( $view, $tags, $expire );
208
-
209
-				$output = '';
210
-				foreach( $this->getSubClients() as $subclient ) {
211
-					$output .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
212
-				}
213
-				$view->detailBody = $output;
214
-			}
215
-			catch( \Aimeos\Client\Html\Exception $e )
216
-			{
217
-				$error = array( $context->getI18n()->dt( 'client', $e->getMessage() ) );
218
-				$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
219
-			}
220
-			catch( \Aimeos\Controller\Frontend\Exception $e )
221
-			{
222
-				$error = array( $context->getI18n()->dt( 'controller/frontend', $e->getMessage() ) );
223
-				$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
224
-			}
225
-			catch( \Aimeos\MShop\Exception $e )
226
-			{
227
-				$error = array( $context->getI18n()->dt( 'mshop', $e->getMessage() ) );
228
-				$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
229
-			}
230
-			catch( \Exception $e )
231
-			{
232
-				$context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
233
-
234
-				$error = array( $context->getI18n()->dt( 'client', 'A non-recoverable error occured' ) );
235
-				$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
236
-			}
237
-
238
-			/** client/html/catalog/detail/standard/template-body
239
-			 * Relative path to the HTML body template of the catalog detail client.
240
-			 *
241
-			 * The template file contains the HTML code and processing instructions
242
-			 * to generate the result shown in the body of the frontend. The
243
-			 * configuration string is the path to the template file relative
244
-			 * to the templates directory (usually in client/html/templates).
245
-			 *
246
-			 * You can overwrite the template file configuration in extensions and
247
-			 * provide alternative templates. These alternative templates should be
248
-			 * named like the default one but with the string "standard" replaced by
249
-			 * an unique name. You may use the name of your project for this. If
250
-			 * you've implemented an alternative client class as well, "standard"
251
-			 * should be replaced by the name of the new class.
252
-			 *
253
-			 * @param string Relative path to the template creating code for the HTML page body
254
-			 * @since 2014.03
255
-			 * @category Developer
256
-			 * @see client/html/catalog/detail/standard/template-header
257
-			 */
258
-			$tplconf = 'client/html/catalog/detail/standard/template-body';
259
-			$default = 'catalog/detail/body-default.php';
260
-
261
-			$html = $view->render( $view->config( $tplconf, $default ) );
262
-
263
-			$this->setCached( 'body', $uid, $prefixes, $confkey, $html, $tags, $expire );
264
-		}
265
-		else
266
-		{
267
-			$html = $this->modifyBody( $html, $uid );
268
-		}
269
-
270
-		return $html;
271
-	}
272
-
273
-
274
-	/**
275
-	 * Returns the HTML string for insertion into the header.
276
-	 *
277
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
278
-	 * @param array &$tags Result array for the list of tags that are associated to the output
279
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
280
-	 * @return string|null String including HTML tags for the header on error
281
-	 */
282
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
283
-	{
284
-		$prefixes = array( 'd' );
285
-		$context = $this->getContext();
286
-		$confkey = 'client/html/catalog/detail';
287
-
288
-
289
-		if( $context->getUserId() != null || ( $html = $this->getCached( 'header', $uid, $prefixes, $confkey ) ) === null )
290
-		{
291
-			$view = $this->getView();
292
-
293
-			try
294
-			{
295
-				$view = $this->setViewParams( $view, $tags, $expire );
296
-
297
-				$output = '';
298
-				foreach( $this->getSubClients() as $subclient ) {
299
-					$output .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
300
-				}
301
-				$view->detailHeader = $output;
302
-			}
303
-			catch( \Exception $e )
304
-			{
305
-				$context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
306
-			}
307
-
308
-			/** client/html/catalog/detail/standard/template-header
309
-			 * Relative path to the HTML header template of the catalog detail client.
310
-			 *
311
-			 * The template file contains the HTML code and processing instructions
312
-			 * to generate the HTML code that is inserted into the HTML page header
313
-			 * of the rendered page in the frontend. The configuration string is the
314
-			 * path to the template file relative to the templates directory (usually
315
-			 * in client/html/templates).
316
-			 *
317
-			 * You can overwrite the template file configuration in extensions and
318
-			 * provide alternative templates. These alternative templates should be
319
-			 * named like the default one but with the string "standard" replaced by
320
-			 * an unique name. You may use the name of your project for this. If
321
-			 * you've implemented an alternative client class as well, "standard"
322
-			 * should be replaced by the name of the new class.
323
-			 *
324
-			 * @param string Relative path to the template creating code for the HTML page head
325
-			 * @since 2014.03
326
-			 * @category Developer
327
-			 * @see client/html/catalog/detail/standard/template-body
328
-			 */
329
-			$tplconf = 'client/html/catalog/detail/standard/template-header';
330
-			$default = 'catalog/detail/header-default.php';
331
-
332
-			$html = $view->render( $view->config( $tplconf, $default ) );
333
-
334
-			$this->setCached( 'header', $uid, $prefixes, $confkey, $html, $tags, $expire );
335
-		}
336
-		else
337
-		{
338
-			$html = $this->modifyHeader( $html, $uid );
339
-		}
340
-
341
-		return $html;
342
-	}
343
-
344
-
345
-	/**
346
-	 * Returns the sub-client given by its name.
347
-	 *
348
-	 * @param string $type Name of the client type
349
-	 * @param string|null $name Name of the sub-client (Default if null)
350
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
351
-	 */
352
-	public function getSubClient( $type, $name = null )
353
-	{
354
-		/** client/html/catalog/detail/decorators/excludes
355
-		 * Excludes decorators added by the "common" option from the catalog detail html client
356
-		 *
357
-		 * Decorators extend the functionality of a class by adding new aspects
358
-		 * (e.g. log what is currently done), executing the methods of the underlying
359
-		 * class only in certain conditions (e.g. only for logged in users) or
360
-		 * modify what is returned to the caller.
361
-		 *
362
-		 * This option allows you to remove a decorator added via
363
-		 * "client/html/common/decorators/default" before they are wrapped
364
-		 * around the html client.
365
-		 *
366
-		 *  client/html/catalog/detail/decorators/excludes = array( 'decorator1' )
367
-		 *
368
-		 * This would remove the decorator named "decorator1" from the list of
369
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
370
-		 * "client/html/common/decorators/default" to the html client.
371
-		 *
372
-		 * @param array List of decorator names
373
-		 * @since 2014.05
374
-		 * @category Developer
375
-		 * @see client/html/common/decorators/default
376
-		 * @see client/html/catalog/detail/decorators/global
377
-		 * @see client/html/catalog/detail/decorators/local
378
-		 */
379
-
380
-		/** client/html/catalog/detail/decorators/global
381
-		 * Adds a list of globally available decorators only to the catalog detail html client
382
-		 *
383
-		 * Decorators extend the functionality of a class by adding new aspects
384
-		 * (e.g. log what is currently done), executing the methods of the underlying
385
-		 * class only in certain conditions (e.g. only for logged in users) or
386
-		 * modify what is returned to the caller.
387
-		 *
388
-		 * This option allows you to wrap global decorators
389
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
390
-		 *
391
-		 *  client/html/catalog/detail/decorators/global = array( 'decorator1' )
392
-		 *
393
-		 * This would add the decorator named "decorator1" defined by
394
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
395
-		 *
396
-		 * @param array List of decorator names
397
-		 * @since 2014.05
398
-		 * @category Developer
399
-		 * @see client/html/common/decorators/default
400
-		 * @see client/html/catalog/detail/decorators/excludes
401
-		 * @see client/html/catalog/detail/decorators/local
402
-		 */
403
-
404
-		/** client/html/catalog/detail/decorators/local
405
-		 * Adds a list of local decorators only to the catalog detail html client
406
-		 *
407
-		 * Decorators extend the functionality of a class by adding new aspects
408
-		 * (e.g. log what is currently done), executing the methods of the underlying
409
-		 * class only in certain conditions (e.g. only for logged in users) or
410
-		 * modify what is returned to the caller.
411
-		 *
412
-		 * This option allows you to wrap local decorators
413
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
414
-		 *
415
-		 *  client/html/catalog/detail/decorators/local = array( 'decorator2' )
416
-		 *
417
-		 * This would add the decorator named "decorator2" defined by
418
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
419
-		 *
420
-		 * @param array List of decorator names
421
-		 * @since 2014.05
422
-		 * @category Developer
423
-		 * @see client/html/common/decorators/default
424
-		 * @see client/html/catalog/detail/decorators/excludes
425
-		 * @see client/html/catalog/detail/decorators/global
426
-		 */
427
-
428
-		return $this->createSubClient( 'catalog/detail/' . $type, $name );
429
-	}
430
-
431
-
432
-	/**
433
-	 * Processes the input, e.g. store given values.
434
-	 * A view must be available and this method doesn't generate any output
435
-	 * besides setting view variables.
436
-	 */
437
-	public function process()
438
-	{
439
-		$context = $this->getContext();
440
-		$view = $this->getView();
441
-
442
-		try
443
-		{
444
-			$site = $context->getLocale()->getSite()->getCode();
445
-			$params = $this->getClientParams( $view->param() );
446
-			$context->getSession()->set( 'aimeos/catalog/detail/params/last' . $site, $params );
447
-
448
-			parent::process();
449
-		}
450
-		catch( \Aimeos\Client\Html\Exception $e )
451
-		{
452
-			$error = array( $context->getI18n()->dt( 'client', $e->getMessage() ) );
453
-			$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
454
-		}
455
-		catch( \Aimeos\Controller\Frontend\Exception $e )
456
-		{
457
-			$error = array( $context->getI18n()->dt( 'controller/frontend', $e->getMessage() ) );
458
-			$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
459
-		}
460
-		catch( \Aimeos\MShop\Exception $e )
461
-		{
462
-			$error = array( $context->getI18n()->dt( 'mshop', $e->getMessage() ) );
463
-			$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
464
-		}
465
-		catch( \Exception $e )
466
-		{
467
-			$context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
468
-
469
-			$error = array( $context->getI18n()->dt( 'client', 'A non-recoverable error occured' ) );
470
-			$view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
471
-		}
472
-	}
473
-
474
-
475
-	/**
476
-	 * Returns the list of sub-client names configured for the client.
477
-	 *
478
-	 * @return array List of HTML client names
479
-	 */
480
-	protected function getSubClientNames()
481
-	{
482
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
483
-	}
484
-
485
-
486
-	/**
487
-	 * Sets the necessary parameter values in the view.
488
-	 *
489
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
490
-	 * @param array &$tags Result array for the list of tags that are associated to the output
491
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
492
-	 * @return \Aimeos\MW\View\Iface Modified view object
493
-	 */
494
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
495
-	{
496
-		if( !isset( $this->cache ) )
497
-		{
498
-			$context = $this->getContext();
499
-			$domains = array( 'media', 'price', 'text', 'attribute', 'product' );
500
-			$productItem = $this->getProductItem( $view->param( 'd_prodid' ), $domains );
501
-			$controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
502
-
503
-
504
-			$attrManager = $controller->createManager( 'attribute' );
505
-			$attrSearch = $attrManager->createSearch( true );
506
-			$expr = array(
507
-				$attrSearch->compare( '==', 'attribute.id', array_keys( $productItem->getRefItems( 'attribute' ) ) ),
508
-				$attrSearch->getConditions(),
509
-			);
510
-			$attrSearch->setConditions( $attrSearch->combine( '&&', $expr ) );
511
-			$attributes = $attrManager->searchItems( $attrSearch, $domains );
512
-
513
-			$this->addMetaItem( $attributes, 'attribute', $this->expire, $this->tags );
514
-			$this->addMetaList( array_keys( $attributes ), 'attribute', $this->expire );
515
-
516
-
517
-			$mediaManager = $controller->createManager( 'media' );
518
-			$mediaSearch = $mediaManager->createSearch( true );
519
-			$expr = array(
520
-				$mediaSearch->compare( '==', 'media.id', array_keys( $productItem->getRefItems( 'media' ) ) ),
521
-				$mediaSearch->getConditions(),
522
-			);
523
-			$mediaSearch->setConditions( $mediaSearch->combine( '&&', $expr ) );
524
-			$media = $mediaManager->searchItems( $mediaSearch, $domains );
525
-
526
-			$this->addMetaItem( $media, 'media', $this->expire, $this->tags );
527
-			$this->addMetaList( array_keys( $media ), 'media', $this->expire );
528
-
529
-
530
-			$view->detailProductItem = $productItem;
531
-			$view->detailProductAttributeItems = $attributes;
532
-			$view->detailProductMediaItems = $media;
533
-			$view->detailParams = $this->getClientParams( $view->param() );
534
-
535
-			$this->cache = $view;
536
-		}
537
-
538
-		$expire = $this->expires( $this->expire, $expire );
539
-		$tags = array_merge( $tags, $this->tags );
540
-
541
-		return $this->cache;
542
-	}
543
-
544
-
545
-	/**
546
-	 * Returns the product item for the given ID including the domain items
547
-	 *
548
-	 * @param string $prodid Unique product ID
549
-	 * @param array List of domain items that should be fetched too
550
-	 * @throws \Aimeos\Client\Html\Exception If no product item was found
551
-	 * @return \Aimeos\MShop\Product\Item\Iface Product item object
552
-	 */
553
-	protected function getProductItem( $prodid, array $domains )
554
-	{
555
-		$context = $this->getContext();
556
-		$config = $context->getConfig();
557
-
558
-		if( $prodid == '' )
559
-		{
560
-			/** client/html/catalog/detail/prodid-default
561
-			 * The default product ID used if none is given as parameter
562
-			 *
563
-			 * To display a product detail view or a part of it for a specific
564
-			 * product, you can configure its ID using this setting. This is
565
-			 * most useful in a CMS where the product ID can be configured
566
-			 * separately for each content node.
567
-			 *
568
-			 * @param string Product ID
569
-			 * @since 2016.01
570
-			 * @category User
571
-			 * @category Developer
572
-			 * @see client/html/catalog/lists/catid-default
573
-			 */
574
-			$prodid = $config->get( 'client/html/catalog/detail/prodid-default', '' );
575
-		}
576
-
577
-		/** client/html/catalog/domains
578
-		 * A list of domain names whose items should be available in the catalog view templates
579
-		 *
580
-		 * @see client/html/catalog/detail/domains
581
-		 */
582
-		$domains = $config->get( 'client/html/catalog/domains', $domains );
583
-
584
-		/** client/html/catalog/detail/domains
585
-		 * A list of domain names whose items should be available in the product detail view template
586
-		 *
587
-		 * The templates rendering product details usually add the images,
588
-		 * prices, texts, attributes, products, etc. associated to the product
589
-		 * item. If you want to display additional or less content, you can
590
-		 * configure your own list of domains (attribute, media, price, product,
591
-		 * text, etc. are domains) whose items are fetched from the storage.
592
-		 * Please keep in mind that the more domains you add to the configuration,
593
-		 * the more time is required for fetching the content!
594
-		 *
595
-		 * Since version 2014.05 this configuration option overwrites the
596
-		 * "client/html/catalog/domains" option that allows to configure the
597
-		 * domain names of the items fetched for all catalog related data.
598
-		 *
599
-		 * @param array List of domain names
600
-		 * @since 2014.03
601
-		 * @category Developer
602
-		 * @see client/html/catalog/domains
603
-		 * @see client/html/catalog/lists/domains
604
-		 */
605
-		$domains = $config->get( 'client/html/catalog/detail/domains', $domains );
606
-
607
-		$controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
608
-		$items = $controller->getProductItems( array( $prodid ), $domains );
609
-
610
-		if( ( $item = reset( $items ) ) === false ) {
611
-			throw new \Aimeos\Client\Html\Exception( sprintf( 'No product with ID "%1$s" found', $prodid ) );
612
-		}
613
-
614
-		$this->addMetaItem( $item, 'product', $this->expire, $this->tags );
615
-		$this->addMetaList( $prodid, 'product', $this->expire );
616
-
617
-		return $item;
618
-	}
25
+    /** client/html/catalog/detail/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/standard/subparts';
59
+
60
+    /** client/html/catalog/detail/social/name
61
+     * Name of the social part used by the catalog detail client implementation
62
+     *
63
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Social\Myname".
64
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
65
+     *
66
+     * @param string Last part of the client class name
67
+     * @since 2014.09
68
+     * @category Developer
69
+     */
70
+
71
+    /** client/html/catalog/detail/image/name
72
+     * Name of the image part used by the catalog detail client implementation
73
+     *
74
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Image\Myname".
75
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
76
+     *
77
+     * @param string Last part of the client class name
78
+     * @since 2014.03
79
+     * @category Developer
80
+     */
81
+
82
+    /** client/html/catalog/detail/basic/name
83
+     * Name of the basic part used by the catalog detail client implementation
84
+     *
85
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basic\Myname".
86
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
87
+     *
88
+     * @param string Last part of the client class name
89
+     * @since 2014.03
90
+     * @category Developer
91
+     */
92
+
93
+    /** client/html/catalog/detail/actions/name
94
+     * Name of the actions part used by the catalog detail client implementation
95
+     *
96
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Actions\Myname".
97
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
98
+     *
99
+     * @param string Last part of the client class name
100
+     * @since 2014.09
101
+     * @category Developer
102
+     */
103
+
104
+    /** client/html/catalog/detail/basket/name
105
+     * Name of the basket part used by the catalog detail client implementation
106
+     *
107
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Myname".
108
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
109
+     *
110
+     * @param string Last part of the client class name
111
+     * @since 2014.03
112
+     * @category Developer
113
+     */
114
+
115
+    /** client/html/catalog/detail/bundle/name
116
+     * Name of the bundle part used by the catalog detail client implementation
117
+     *
118
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Bundle\Myname".
119
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
120
+     *
121
+     * @param string Last part of the client class name
122
+     * @since 2014.11
123
+     * @category Developer
124
+     */
125
+
126
+    /** client/html/catalog/detail/additional/name
127
+     * Name of the additional part used by the catalog detail client implementation
128
+     *
129
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Additional\Myname".
130
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
131
+     *
132
+     * @param string Last part of the client class name
133
+     * @since 2014.03
134
+     * @category Developer
135
+     */
136
+
137
+    /** client/html/catalog/detail/suggest/name
138
+     * Name of the suggest part used by the catalog detail client implementation
139
+     *
140
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Suggest\Myname".
141
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
142
+     *
143
+     * @param string Last part of the client class name
144
+     * @since 2014.03
145
+     * @category Developer
146
+     */
147
+
148
+    /** client/html/catalog/detail/bought/name
149
+     * Name of the bought together part used by the catalog detail client implementation
150
+     *
151
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Bought\Myname".
152
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
153
+     *
154
+     * @param string Last part of the client class name
155
+     * @since 2014.09
156
+     * @category Developer
157
+     */
158
+
159
+    /** client/html/catalog/detail/seen/name
160
+     * Name of the seen part used by the catalog detail client implementation
161
+     *
162
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Seen\Myname".
163
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
164
+     *
165
+     * @param string Last part of the client class name
166
+     * @since 2014.03
167
+     * @category Developer
168
+     */
169
+    private $subPartNames = array( 'image', 'basic', 'basket', 'actions', 'social', 'bundle', 'additional', 'suggest', 'bought', 'seen' );
170
+
171
+    private $tags = array();
172
+    private $expire;
173
+    private $cache;
174
+
175
+
176
+    /**
177
+     * Returns the HTML code for insertion into the body.
178
+     *
179
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
180
+     * @param array &$tags Result array for the list of tags that are associated to the output
181
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
182
+     * @return string HTML code
183
+     */
184
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
185
+    {
186
+        $prefixes = array( 'd' );
187
+        $context = $this->getContext();
188
+
189
+        /** client/html/catalog/detail
190
+         * All parameters defined for the catalog detail component and its subparts
191
+         *
192
+         * This returns all settings related to the detail component.
193
+         * Please refer to the single settings for details.
194
+         *
195
+         * @param array Associative list of name/value settings
196
+         * @category Developer
197
+         * @see client/html/catalog#detail
198
+         */
199
+        $confkey = 'client/html/catalog/detail';
200
+
201
+        if( $context->getUserId() != null || ( $html = $this->getCached( 'body', $uid, $prefixes, $confkey ) ) === null )
202
+        {
203
+            $view = $this->getView();
204
+
205
+            try
206
+            {
207
+                $view = $this->setViewParams( $view, $tags, $expire );
208
+
209
+                $output = '';
210
+                foreach( $this->getSubClients() as $subclient ) {
211
+                    $output .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
212
+                }
213
+                $view->detailBody = $output;
214
+            }
215
+            catch( \Aimeos\Client\Html\Exception $e )
216
+            {
217
+                $error = array( $context->getI18n()->dt( 'client', $e->getMessage() ) );
218
+                $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
219
+            }
220
+            catch( \Aimeos\Controller\Frontend\Exception $e )
221
+            {
222
+                $error = array( $context->getI18n()->dt( 'controller/frontend', $e->getMessage() ) );
223
+                $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
224
+            }
225
+            catch( \Aimeos\MShop\Exception $e )
226
+            {
227
+                $error = array( $context->getI18n()->dt( 'mshop', $e->getMessage() ) );
228
+                $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
229
+            }
230
+            catch( \Exception $e )
231
+            {
232
+                $context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
233
+
234
+                $error = array( $context->getI18n()->dt( 'client', 'A non-recoverable error occured' ) );
235
+                $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
236
+            }
237
+
238
+            /** client/html/catalog/detail/standard/template-body
239
+             * Relative path to the HTML body template of the catalog detail client.
240
+             *
241
+             * The template file contains the HTML code and processing instructions
242
+             * to generate the result shown in the body of the frontend. The
243
+             * configuration string is the path to the template file relative
244
+             * to the templates directory (usually in client/html/templates).
245
+             *
246
+             * You can overwrite the template file configuration in extensions and
247
+             * provide alternative templates. These alternative templates should be
248
+             * named like the default one but with the string "standard" replaced by
249
+             * an unique name. You may use the name of your project for this. If
250
+             * you've implemented an alternative client class as well, "standard"
251
+             * should be replaced by the name of the new class.
252
+             *
253
+             * @param string Relative path to the template creating code for the HTML page body
254
+             * @since 2014.03
255
+             * @category Developer
256
+             * @see client/html/catalog/detail/standard/template-header
257
+             */
258
+            $tplconf = 'client/html/catalog/detail/standard/template-body';
259
+            $default = 'catalog/detail/body-default.php';
260
+
261
+            $html = $view->render( $view->config( $tplconf, $default ) );
262
+
263
+            $this->setCached( 'body', $uid, $prefixes, $confkey, $html, $tags, $expire );
264
+        }
265
+        else
266
+        {
267
+            $html = $this->modifyBody( $html, $uid );
268
+        }
269
+
270
+        return $html;
271
+    }
272
+
273
+
274
+    /**
275
+     * Returns the HTML string for insertion into the header.
276
+     *
277
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
278
+     * @param array &$tags Result array for the list of tags that are associated to the output
279
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
280
+     * @return string|null String including HTML tags for the header on error
281
+     */
282
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
283
+    {
284
+        $prefixes = array( 'd' );
285
+        $context = $this->getContext();
286
+        $confkey = 'client/html/catalog/detail';
287
+
288
+
289
+        if( $context->getUserId() != null || ( $html = $this->getCached( 'header', $uid, $prefixes, $confkey ) ) === null )
290
+        {
291
+            $view = $this->getView();
292
+
293
+            try
294
+            {
295
+                $view = $this->setViewParams( $view, $tags, $expire );
296
+
297
+                $output = '';
298
+                foreach( $this->getSubClients() as $subclient ) {
299
+                    $output .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
300
+                }
301
+                $view->detailHeader = $output;
302
+            }
303
+            catch( \Exception $e )
304
+            {
305
+                $context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
306
+            }
307
+
308
+            /** client/html/catalog/detail/standard/template-header
309
+             * Relative path to the HTML header template of the catalog detail client.
310
+             *
311
+             * The template file contains the HTML code and processing instructions
312
+             * to generate the HTML code that is inserted into the HTML page header
313
+             * of the rendered page in the frontend. The configuration string is the
314
+             * path to the template file relative to the templates directory (usually
315
+             * in client/html/templates).
316
+             *
317
+             * You can overwrite the template file configuration in extensions and
318
+             * provide alternative templates. These alternative templates should be
319
+             * named like the default one but with the string "standard" replaced by
320
+             * an unique name. You may use the name of your project for this. If
321
+             * you've implemented an alternative client class as well, "standard"
322
+             * should be replaced by the name of the new class.
323
+             *
324
+             * @param string Relative path to the template creating code for the HTML page head
325
+             * @since 2014.03
326
+             * @category Developer
327
+             * @see client/html/catalog/detail/standard/template-body
328
+             */
329
+            $tplconf = 'client/html/catalog/detail/standard/template-header';
330
+            $default = 'catalog/detail/header-default.php';
331
+
332
+            $html = $view->render( $view->config( $tplconf, $default ) );
333
+
334
+            $this->setCached( 'header', $uid, $prefixes, $confkey, $html, $tags, $expire );
335
+        }
336
+        else
337
+        {
338
+            $html = $this->modifyHeader( $html, $uid );
339
+        }
340
+
341
+        return $html;
342
+    }
343
+
344
+
345
+    /**
346
+     * Returns the sub-client given by its name.
347
+     *
348
+     * @param string $type Name of the client type
349
+     * @param string|null $name Name of the sub-client (Default if null)
350
+     * @return \Aimeos\Client\Html\Iface Sub-client object
351
+     */
352
+    public function getSubClient( $type, $name = null )
353
+    {
354
+        /** client/html/catalog/detail/decorators/excludes
355
+         * Excludes decorators added by the "common" option from the catalog detail html client
356
+         *
357
+         * Decorators extend the functionality of a class by adding new aspects
358
+         * (e.g. log what is currently done), executing the methods of the underlying
359
+         * class only in certain conditions (e.g. only for logged in users) or
360
+         * modify what is returned to the caller.
361
+         *
362
+         * This option allows you to remove a decorator added via
363
+         * "client/html/common/decorators/default" before they are wrapped
364
+         * around the html client.
365
+         *
366
+         *  client/html/catalog/detail/decorators/excludes = array( 'decorator1' )
367
+         *
368
+         * This would remove the decorator named "decorator1" from the list of
369
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
370
+         * "client/html/common/decorators/default" to the html client.
371
+         *
372
+         * @param array List of decorator names
373
+         * @since 2014.05
374
+         * @category Developer
375
+         * @see client/html/common/decorators/default
376
+         * @see client/html/catalog/detail/decorators/global
377
+         * @see client/html/catalog/detail/decorators/local
378
+         */
379
+
380
+        /** client/html/catalog/detail/decorators/global
381
+         * Adds a list of globally available decorators only to the catalog detail html client
382
+         *
383
+         * Decorators extend the functionality of a class by adding new aspects
384
+         * (e.g. log what is currently done), executing the methods of the underlying
385
+         * class only in certain conditions (e.g. only for logged in users) or
386
+         * modify what is returned to the caller.
387
+         *
388
+         * This option allows you to wrap global decorators
389
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
390
+         *
391
+         *  client/html/catalog/detail/decorators/global = array( 'decorator1' )
392
+         *
393
+         * This would add the decorator named "decorator1" defined by
394
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
395
+         *
396
+         * @param array List of decorator names
397
+         * @since 2014.05
398
+         * @category Developer
399
+         * @see client/html/common/decorators/default
400
+         * @see client/html/catalog/detail/decorators/excludes
401
+         * @see client/html/catalog/detail/decorators/local
402
+         */
403
+
404
+        /** client/html/catalog/detail/decorators/local
405
+         * Adds a list of local decorators only to the catalog detail html client
406
+         *
407
+         * Decorators extend the functionality of a class by adding new aspects
408
+         * (e.g. log what is currently done), executing the methods of the underlying
409
+         * class only in certain conditions (e.g. only for logged in users) or
410
+         * modify what is returned to the caller.
411
+         *
412
+         * This option allows you to wrap local decorators
413
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
414
+         *
415
+         *  client/html/catalog/detail/decorators/local = array( 'decorator2' )
416
+         *
417
+         * This would add the decorator named "decorator2" defined by
418
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
419
+         *
420
+         * @param array List of decorator names
421
+         * @since 2014.05
422
+         * @category Developer
423
+         * @see client/html/common/decorators/default
424
+         * @see client/html/catalog/detail/decorators/excludes
425
+         * @see client/html/catalog/detail/decorators/global
426
+         */
427
+
428
+        return $this->createSubClient( 'catalog/detail/' . $type, $name );
429
+    }
430
+
431
+
432
+    /**
433
+     * Processes the input, e.g. store given values.
434
+     * A view must be available and this method doesn't generate any output
435
+     * besides setting view variables.
436
+     */
437
+    public function process()
438
+    {
439
+        $context = $this->getContext();
440
+        $view = $this->getView();
441
+
442
+        try
443
+        {
444
+            $site = $context->getLocale()->getSite()->getCode();
445
+            $params = $this->getClientParams( $view->param() );
446
+            $context->getSession()->set( 'aimeos/catalog/detail/params/last' . $site, $params );
447
+
448
+            parent::process();
449
+        }
450
+        catch( \Aimeos\Client\Html\Exception $e )
451
+        {
452
+            $error = array( $context->getI18n()->dt( 'client', $e->getMessage() ) );
453
+            $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
454
+        }
455
+        catch( \Aimeos\Controller\Frontend\Exception $e )
456
+        {
457
+            $error = array( $context->getI18n()->dt( 'controller/frontend', $e->getMessage() ) );
458
+            $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
459
+        }
460
+        catch( \Aimeos\MShop\Exception $e )
461
+        {
462
+            $error = array( $context->getI18n()->dt( 'mshop', $e->getMessage() ) );
463
+            $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
464
+        }
465
+        catch( \Exception $e )
466
+        {
467
+            $context->getLogger()->log( $e->getMessage() . PHP_EOL . $e->getTraceAsString() );
468
+
469
+            $error = array( $context->getI18n()->dt( 'client', 'A non-recoverable error occured' ) );
470
+            $view->detailErrorList = $view->get( 'detailErrorList', array() ) + $error;
471
+        }
472
+    }
473
+
474
+
475
+    /**
476
+     * Returns the list of sub-client names configured for the client.
477
+     *
478
+     * @return array List of HTML client names
479
+     */
480
+    protected function getSubClientNames()
481
+    {
482
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
483
+    }
484
+
485
+
486
+    /**
487
+     * Sets the necessary parameter values in the view.
488
+     *
489
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
490
+     * @param array &$tags Result array for the list of tags that are associated to the output
491
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
492
+     * @return \Aimeos\MW\View\Iface Modified view object
493
+     */
494
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
495
+    {
496
+        if( !isset( $this->cache ) )
497
+        {
498
+            $context = $this->getContext();
499
+            $domains = array( 'media', 'price', 'text', 'attribute', 'product' );
500
+            $productItem = $this->getProductItem( $view->param( 'd_prodid' ), $domains );
501
+            $controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
502
+
503
+
504
+            $attrManager = $controller->createManager( 'attribute' );
505
+            $attrSearch = $attrManager->createSearch( true );
506
+            $expr = array(
507
+                $attrSearch->compare( '==', 'attribute.id', array_keys( $productItem->getRefItems( 'attribute' ) ) ),
508
+                $attrSearch->getConditions(),
509
+            );
510
+            $attrSearch->setConditions( $attrSearch->combine( '&&', $expr ) );
511
+            $attributes = $attrManager->searchItems( $attrSearch, $domains );
512
+
513
+            $this->addMetaItem( $attributes, 'attribute', $this->expire, $this->tags );
514
+            $this->addMetaList( array_keys( $attributes ), 'attribute', $this->expire );
515
+
516
+
517
+            $mediaManager = $controller->createManager( 'media' );
518
+            $mediaSearch = $mediaManager->createSearch( true );
519
+            $expr = array(
520
+                $mediaSearch->compare( '==', 'media.id', array_keys( $productItem->getRefItems( 'media' ) ) ),
521
+                $mediaSearch->getConditions(),
522
+            );
523
+            $mediaSearch->setConditions( $mediaSearch->combine( '&&', $expr ) );
524
+            $media = $mediaManager->searchItems( $mediaSearch, $domains );
525
+
526
+            $this->addMetaItem( $media, 'media', $this->expire, $this->tags );
527
+            $this->addMetaList( array_keys( $media ), 'media', $this->expire );
528
+
529
+
530
+            $view->detailProductItem = $productItem;
531
+            $view->detailProductAttributeItems = $attributes;
532
+            $view->detailProductMediaItems = $media;
533
+            $view->detailParams = $this->getClientParams( $view->param() );
534
+
535
+            $this->cache = $view;
536
+        }
537
+
538
+        $expire = $this->expires( $this->expire, $expire );
539
+        $tags = array_merge( $tags, $this->tags );
540
+
541
+        return $this->cache;
542
+    }
543
+
544
+
545
+    /**
546
+     * Returns the product item for the given ID including the domain items
547
+     *
548
+     * @param string $prodid Unique product ID
549
+     * @param array List of domain items that should be fetched too
550
+     * @throws \Aimeos\Client\Html\Exception If no product item was found
551
+     * @return \Aimeos\MShop\Product\Item\Iface Product item object
552
+     */
553
+    protected function getProductItem( $prodid, array $domains )
554
+    {
555
+        $context = $this->getContext();
556
+        $config = $context->getConfig();
557
+
558
+        if( $prodid == '' )
559
+        {
560
+            /** client/html/catalog/detail/prodid-default
561
+             * The default product ID used if none is given as parameter
562
+             *
563
+             * To display a product detail view or a part of it for a specific
564
+             * product, you can configure its ID using this setting. This is
565
+             * most useful in a CMS where the product ID can be configured
566
+             * separately for each content node.
567
+             *
568
+             * @param string Product ID
569
+             * @since 2016.01
570
+             * @category User
571
+             * @category Developer
572
+             * @see client/html/catalog/lists/catid-default
573
+             */
574
+            $prodid = $config->get( 'client/html/catalog/detail/prodid-default', '' );
575
+        }
576
+
577
+        /** client/html/catalog/domains
578
+         * A list of domain names whose items should be available in the catalog view templates
579
+         *
580
+         * @see client/html/catalog/detail/domains
581
+         */
582
+        $domains = $config->get( 'client/html/catalog/domains', $domains );
583
+
584
+        /** client/html/catalog/detail/domains
585
+         * A list of domain names whose items should be available in the product detail view template
586
+         *
587
+         * The templates rendering product details usually add the images,
588
+         * prices, texts, attributes, products, etc. associated to the product
589
+         * item. If you want to display additional or less content, you can
590
+         * configure your own list of domains (attribute, media, price, product,
591
+         * text, etc. are domains) whose items are fetched from the storage.
592
+         * Please keep in mind that the more domains you add to the configuration,
593
+         * the more time is required for fetching the content!
594
+         *
595
+         * Since version 2014.05 this configuration option overwrites the
596
+         * "client/html/catalog/domains" option that allows to configure the
597
+         * domain names of the items fetched for all catalog related data.
598
+         *
599
+         * @param array List of domain names
600
+         * @since 2014.03
601
+         * @category Developer
602
+         * @see client/html/catalog/domains
603
+         * @see client/html/catalog/lists/domains
604
+         */
605
+        $domains = $config->get( 'client/html/catalog/detail/domains', $domains );
606
+
607
+        $controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
608
+        $items = $controller->getProductItems( array( $prodid ), $domains );
609
+
610
+        if( ( $item = reset( $items ) ) === false ) {
611
+            throw new \Aimeos\Client\Html\Exception( sprintf( 'No product with ID "%1$s" found', $prodid ) );
612
+        }
613
+
614
+        $this->addMetaItem( $item, 'product', $this->expire, $this->tags );
615
+        $this->addMetaList( $prodid, 'product', $this->expire );
616
+
617
+        return $item;
618
+    }
619 619
 }
620 620
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Basic/Standard.php 1 patch
Indentation   +226 added lines, -226 removed lines patch added patch discarded remove patch
@@ -19,231 +19,231 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/basic/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail basic section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/basic/standard/subparts';
59
-	private $subPartNames = array();
60
-
61
-
62
-	/**
63
-	 * Returns the HTML code for insertion into the body.
64
-	 *
65
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
66
-	 * @param array &$tags Result array for the list of tags that are associated to the output
67
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
68
-	 * @return string HTML code
69
-	 */
70
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
71
-	{
72
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
73
-
74
-		$html = '';
75
-		foreach( $this->getSubClients() as $subclient ) {
76
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
77
-		}
78
-		$view->basicBody = $html;
79
-
80
-		/** client/html/catalog/detail/basic/standard/template-body
81
-		 * Relative path to the HTML body template of the catalog detail basic client.
82
-		 *
83
-		 * The template file contains the HTML code and processing instructions
84
-		 * to generate the result shown in the body of the frontend. The
85
-		 * configuration string is the path to the template file relative
86
-		 * to the templates directory (usually in client/html/templates).
87
-		 *
88
-		 * You can overwrite the template file configuration in extensions and
89
-		 * provide alternative templates. These alternative templates should be
90
-		 * named like the default one but with the string "standard" replaced by
91
-		 * an unique name. You may use the name of your project for this. If
92
-		 * you've implemented an alternative client class as well, "standard"
93
-		 * should be replaced by the name of the new class.
94
-		 *
95
-		 * @param string Relative path to the template creating code for the HTML page body
96
-		 * @since 2014.03
97
-		 * @category Developer
98
-		 * @see client/html/catalog/detail/basic/standard/template-header
99
-		 */
100
-		$tplconf = 'client/html/catalog/detail/basic/standard/template-body';
101
-		$default = 'catalog/detail/basic-body-default.php';
102
-
103
-		return $view->render( $view->config( $tplconf, $default ) );
104
-	}
105
-
106
-
107
-	/**
108
-	 * Returns the HTML string for insertion into the header.
109
-	 *
110
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
111
-	 * @param array &$tags Result array for the list of tags that are associated to the output
112
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
113
-	 * @return string|null String including HTML tags for the header on error
114
-	 */
115
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
116
-	{
117
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
118
-
119
-		$html = '';
120
-		foreach( $this->getSubClients() as $subclient ) {
121
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
122
-		}
123
-		$view->basicHeader = $html;
124
-
125
-		/** client/html/catalog/detail/basic/standard/template-header
126
-		 * Relative path to the HTML header template of the catalog detail basic client.
127
-		 *
128
-		 * The template file contains the HTML code and processing instructions
129
-		 * to generate the HTML code that is inserted into the HTML page header
130
-		 * of the rendered page in the frontend. The configuration string is the
131
-		 * path to the template file relative to the templates directory (usually
132
-		 * in client/html/templates).
133
-		 *
134
-		 * You can overwrite the template file configuration in extensions and
135
-		 * provide alternative templates. These alternative templates should be
136
-		 * named like the default one but with the string "standard" replaced by
137
-		 * an unique name. You may use the name of your project for this. If
138
-		 * you've implemented an alternative client class as well, "standard"
139
-		 * should be replaced by the name of the new class.
140
-		 *
141
-		 * @param string Relative path to the template creating code for the HTML page head
142
-		 * @since 2014.03
143
-		 * @category Developer
144
-		 * @see client/html/catalog/detail/basic/standard/template-body
145
-		 */
146
-		$tplconf = 'client/html/catalog/detail/basic/standard/template-header';
147
-		$default = 'catalog/detail/basic-header-default.php';
148
-
149
-		return $view->render( $view->config( $tplconf, $default ) );
150
-	}
151
-
152
-
153
-	/**
154
-	 * Returns the sub-client given by its name.
155
-	 *
156
-	 * @param string $type Name of the client type
157
-	 * @param string|null $name Name of the sub-client (Default if null)
158
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
159
-	 */
160
-	public function getSubClient( $type, $name = null )
161
-	{
162
-		/** client/html/catalog/detail/basic/decorators/excludes
163
-		 * Excludes decorators added by the "common" option from the catalog detail basic html client
164
-		 *
165
-		 * Decorators extend the functionality of a class by adding new aspects
166
-		 * (e.g. log what is currently done), executing the methods of the underlying
167
-		 * class only in certain conditions (e.g. only for logged in users) or
168
-		 * modify what is returned to the caller.
169
-		 *
170
-		 * This option allows you to remove a decorator added via
171
-		 * "client/html/common/decorators/default" before they are wrapped
172
-		 * around the html client.
173
-		 *
174
-		 *  client/html/catalog/detail/basic/decorators/excludes = array( 'decorator1' )
175
-		 *
176
-		 * This would remove the decorator named "decorator1" from the list of
177
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
178
-		 * "client/html/common/decorators/default" to the html client.
179
-		 *
180
-		 * @param array List of decorator names
181
-		 * @since 2015.08
182
-		 * @category Developer
183
-		 * @see client/html/common/decorators/default
184
-		 * @see client/html/catalog/detail/basic/decorators/global
185
-		 * @see client/html/catalog/detail/basic/decorators/local
186
-		 */
187
-
188
-		/** client/html/catalog/detail/basic/decorators/global
189
-		 * Adds a list of globally available decorators only to the catalog detail basic html client
190
-		 *
191
-		 * Decorators extend the functionality of a class by adding new aspects
192
-		 * (e.g. log what is currently done), executing the methods of the underlying
193
-		 * class only in certain conditions (e.g. only for logged in users) or
194
-		 * modify what is returned to the caller.
195
-		 *
196
-		 * This option allows you to wrap global decorators
197
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
198
-		 *
199
-		 *  client/html/catalog/detail/basic/decorators/global = array( 'decorator1' )
200
-		 *
201
-		 * This would add the decorator named "decorator1" defined by
202
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
203
-		 *
204
-		 * @param array List of decorator names
205
-		 * @since 2015.08
206
-		 * @category Developer
207
-		 * @see client/html/common/decorators/default
208
-		 * @see client/html/catalog/detail/basic/decorators/excludes
209
-		 * @see client/html/catalog/detail/basic/decorators/local
210
-		 */
211
-
212
-		/** client/html/catalog/detail/basic/decorators/local
213
-		 * Adds a list of local decorators only to the catalog detail basic html client
214
-		 *
215
-		 * Decorators extend the functionality of a class by adding new aspects
216
-		 * (e.g. log what is currently done), executing the methods of the underlying
217
-		 * class only in certain conditions (e.g. only for logged in users) or
218
-		 * modify what is returned to the caller.
219
-		 *
220
-		 * This option allows you to wrap local decorators
221
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
222
-		 *
223
-		 *  client/html/catalog/detail/basic/decorators/local = array( 'decorator2' )
224
-		 *
225
-		 * This would add the decorator named "decorator2" defined by
226
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
227
-		 *
228
-		 * @param array List of decorator names
229
-		 * @since 2015.08
230
-		 * @category Developer
231
-		 * @see client/html/common/decorators/default
232
-		 * @see client/html/catalog/detail/basic/decorators/excludes
233
-		 * @see client/html/catalog/detail/basic/decorators/global
234
-		 */
235
-
236
-		return $this->createSubClient( 'catalog/detail/basic/' . $type, $name );
237
-	}
238
-
239
-
240
-	/**
241
-	 * Returns the list of sub-client names configured for the client.
242
-	 *
243
-	 * @return array List of HTML client names
244
-	 */
245
-	protected function getSubClientNames()
246
-	{
247
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
248
-	}
25
+    /** client/html/catalog/detail/basic/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail basic section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/basic/standard/subparts';
59
+    private $subPartNames = array();
60
+
61
+
62
+    /**
63
+     * Returns the HTML code for insertion into the body.
64
+     *
65
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
66
+     * @param array &$tags Result array for the list of tags that are associated to the output
67
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
68
+     * @return string HTML code
69
+     */
70
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
71
+    {
72
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
73
+
74
+        $html = '';
75
+        foreach( $this->getSubClients() as $subclient ) {
76
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
77
+        }
78
+        $view->basicBody = $html;
79
+
80
+        /** client/html/catalog/detail/basic/standard/template-body
81
+         * Relative path to the HTML body template of the catalog detail basic client.
82
+         *
83
+         * The template file contains the HTML code and processing instructions
84
+         * to generate the result shown in the body of the frontend. The
85
+         * configuration string is the path to the template file relative
86
+         * to the templates directory (usually in client/html/templates).
87
+         *
88
+         * You can overwrite the template file configuration in extensions and
89
+         * provide alternative templates. These alternative templates should be
90
+         * named like the default one but with the string "standard" replaced by
91
+         * an unique name. You may use the name of your project for this. If
92
+         * you've implemented an alternative client class as well, "standard"
93
+         * should be replaced by the name of the new class.
94
+         *
95
+         * @param string Relative path to the template creating code for the HTML page body
96
+         * @since 2014.03
97
+         * @category Developer
98
+         * @see client/html/catalog/detail/basic/standard/template-header
99
+         */
100
+        $tplconf = 'client/html/catalog/detail/basic/standard/template-body';
101
+        $default = 'catalog/detail/basic-body-default.php';
102
+
103
+        return $view->render( $view->config( $tplconf, $default ) );
104
+    }
105
+
106
+
107
+    /**
108
+     * Returns the HTML string for insertion into the header.
109
+     *
110
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
111
+     * @param array &$tags Result array for the list of tags that are associated to the output
112
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
113
+     * @return string|null String including HTML tags for the header on error
114
+     */
115
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
116
+    {
117
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
118
+
119
+        $html = '';
120
+        foreach( $this->getSubClients() as $subclient ) {
121
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
122
+        }
123
+        $view->basicHeader = $html;
124
+
125
+        /** client/html/catalog/detail/basic/standard/template-header
126
+         * Relative path to the HTML header template of the catalog detail basic client.
127
+         *
128
+         * The template file contains the HTML code and processing instructions
129
+         * to generate the HTML code that is inserted into the HTML page header
130
+         * of the rendered page in the frontend. The configuration string is the
131
+         * path to the template file relative to the templates directory (usually
132
+         * in client/html/templates).
133
+         *
134
+         * You can overwrite the template file configuration in extensions and
135
+         * provide alternative templates. These alternative templates should be
136
+         * named like the default one but with the string "standard" replaced by
137
+         * an unique name. You may use the name of your project for this. If
138
+         * you've implemented an alternative client class as well, "standard"
139
+         * should be replaced by the name of the new class.
140
+         *
141
+         * @param string Relative path to the template creating code for the HTML page head
142
+         * @since 2014.03
143
+         * @category Developer
144
+         * @see client/html/catalog/detail/basic/standard/template-body
145
+         */
146
+        $tplconf = 'client/html/catalog/detail/basic/standard/template-header';
147
+        $default = 'catalog/detail/basic-header-default.php';
148
+
149
+        return $view->render( $view->config( $tplconf, $default ) );
150
+    }
151
+
152
+
153
+    /**
154
+     * Returns the sub-client given by its name.
155
+     *
156
+     * @param string $type Name of the client type
157
+     * @param string|null $name Name of the sub-client (Default if null)
158
+     * @return \Aimeos\Client\Html\Iface Sub-client object
159
+     */
160
+    public function getSubClient( $type, $name = null )
161
+    {
162
+        /** client/html/catalog/detail/basic/decorators/excludes
163
+         * Excludes decorators added by the "common" option from the catalog detail basic html client
164
+         *
165
+         * Decorators extend the functionality of a class by adding new aspects
166
+         * (e.g. log what is currently done), executing the methods of the underlying
167
+         * class only in certain conditions (e.g. only for logged in users) or
168
+         * modify what is returned to the caller.
169
+         *
170
+         * This option allows you to remove a decorator added via
171
+         * "client/html/common/decorators/default" before they are wrapped
172
+         * around the html client.
173
+         *
174
+         *  client/html/catalog/detail/basic/decorators/excludes = array( 'decorator1' )
175
+         *
176
+         * This would remove the decorator named "decorator1" from the list of
177
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
178
+         * "client/html/common/decorators/default" to the html client.
179
+         *
180
+         * @param array List of decorator names
181
+         * @since 2015.08
182
+         * @category Developer
183
+         * @see client/html/common/decorators/default
184
+         * @see client/html/catalog/detail/basic/decorators/global
185
+         * @see client/html/catalog/detail/basic/decorators/local
186
+         */
187
+
188
+        /** client/html/catalog/detail/basic/decorators/global
189
+         * Adds a list of globally available decorators only to the catalog detail basic html client
190
+         *
191
+         * Decorators extend the functionality of a class by adding new aspects
192
+         * (e.g. log what is currently done), executing the methods of the underlying
193
+         * class only in certain conditions (e.g. only for logged in users) or
194
+         * modify what is returned to the caller.
195
+         *
196
+         * This option allows you to wrap global decorators
197
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
198
+         *
199
+         *  client/html/catalog/detail/basic/decorators/global = array( 'decorator1' )
200
+         *
201
+         * This would add the decorator named "decorator1" defined by
202
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
203
+         *
204
+         * @param array List of decorator names
205
+         * @since 2015.08
206
+         * @category Developer
207
+         * @see client/html/common/decorators/default
208
+         * @see client/html/catalog/detail/basic/decorators/excludes
209
+         * @see client/html/catalog/detail/basic/decorators/local
210
+         */
211
+
212
+        /** client/html/catalog/detail/basic/decorators/local
213
+         * Adds a list of local decorators only to the catalog detail basic html client
214
+         *
215
+         * Decorators extend the functionality of a class by adding new aspects
216
+         * (e.g. log what is currently done), executing the methods of the underlying
217
+         * class only in certain conditions (e.g. only for logged in users) or
218
+         * modify what is returned to the caller.
219
+         *
220
+         * This option allows you to wrap local decorators
221
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
222
+         *
223
+         *  client/html/catalog/detail/basic/decorators/local = array( 'decorator2' )
224
+         *
225
+         * This would add the decorator named "decorator2" defined by
226
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
227
+         *
228
+         * @param array List of decorator names
229
+         * @since 2015.08
230
+         * @category Developer
231
+         * @see client/html/common/decorators/default
232
+         * @see client/html/catalog/detail/basic/decorators/excludes
233
+         * @see client/html/catalog/detail/basic/decorators/global
234
+         */
235
+
236
+        return $this->createSubClient( 'catalog/detail/basic/' . $type, $name );
237
+    }
238
+
239
+
240
+    /**
241
+     * Returns the list of sub-client names configured for the client.
242
+     *
243
+     * @return array List of HTML client names
244
+     */
245
+    protected function getSubClientNames()
246
+    {
247
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
248
+    }
249 249
 }
250 250
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Basket/Service/Standard.php 1 patch
Indentation   +307 added lines, -307 removed lines patch added patch discarded remove patch
@@ -18,312 +18,312 @@
 block discarded – undo
18 18
  * @subpackage Html
19 19
  */
20 20
 class Standard
21
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
22
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
21
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
22
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
23 23
 {
24
-	/** client/html/catalog/detail/basket/service/standard/subparts
25
-	 * List of HTML sub-clients rendered within the catalog detail basket attribute section
26
-	 *
27
-	 * The output of the frontend is composed of the code generated by the HTML
28
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
29
-	 * that are responsible for rendering certain sub-parts of the output. The
30
-	 * sub-clients can contain HTML clients themselves and therefore a
31
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
32
-	 * the output that is placed inside the container of its parent.
33
-	 *
34
-	 * At first, always the HTML code generated by the parent is printed, then
35
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
36
-	 * determines the order of the output of these sub-clients inside the parent
37
-	 * container. If the configured list of clients is
38
-	 *
39
-	 *  array( "subclient1", "subclient2" )
40
-	 *
41
-	 * you can easily change the order of the output by reordering the subparts:
42
-	 *
43
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
44
-	 *
45
-	 * You can also remove one or more parts if they shouldn't be rendered:
46
-	 *
47
-	 *  client/html/<clients>/subparts = array( "subclient1" )
48
-	 *
49
-	 * As the clients only generates structural HTML, the layout defined via CSS
50
-	 * should support adding, removing or reordering content by a fluid like
51
-	 * design.
52
-	 *
53
-	 * @param array List of sub-client names
54
-	 * @since 2016.05
55
-	 * @category Developer
56
-	 */
57
-	private $subPartPath = 'client/html/catalog/detail/basket/service/standard/subparts';
58
-	private $subPartNames = array();
59
-
60
-	private $tags = array();
61
-	private $expire;
62
-	private $cache;
63
-
64
-
65
-	/**
66
-	 * Returns the HTML code for insertion into the body.
67
-	 *
68
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
-	 * @param array &$tags Result array for the list of tags that are associated to the output
70
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
-	 * @return string HTML code
72
-	 */
73
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
-	{
75
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
76
-
77
-		$html = '';
78
-		foreach( $this->getSubClients() as $subclient ) {
79
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
-		}
81
-		$view->serviceBody = $html;
82
-
83
-		/** client/html/catalog/detail/basket/service/standard/template-body
84
-		 * Relative path to the HTML body template of the catalog detail basket service client.
85
-		 *
86
-		 * The template file contains the HTML code and processing instructions
87
-		 * to generate the result shown in the body of the frontend. The
88
-		 * configuration string is the path to the template file relative
89
-		 * to the templates directory (usually in client/html/templates).
90
-		 *
91
-		 * You can overwrite the template file configuration in extensions and
92
-		 * provide alternative templates. These alternative templates should be
93
-		 * named like the default one but with the string "standard" replaced by
94
-		 * an unique name. You may use the name of your project for this. If
95
-		 * you've implemented an alternative client class as well, "standard"
96
-		 * should be replaced by the name of the new class.
97
-		 *
98
-		 * @param string Relative path to the template creating code for the HTML page body
99
-		 * @since 2016.05
100
-		 * @category Developer
101
-		 * @see client/html/catalog/detail/basket/service/standard/template-header
102
-		 */
103
-		$tplconf = 'client/html/catalog/detail/basket/service/standard/template-body';
104
-		$default = 'catalog/detail/basket-service-body-default.php';
105
-
106
-		return $view->render( $view->config( $tplconf, $default ) );
107
-	}
108
-
109
-
110
-	/**
111
-	 * Returns the HTML string for insertion into the header.
112
-	 *
113
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
-	 * @param array &$tags Result array for the list of tags that are associated to the output
115
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
-	 * @return string|null String including HTML tags for the header on error
117
-	 */
118
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
-	{
120
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
121
-
122
-		$html = '';
123
-		foreach( $this->getSubClients() as $subclient ) {
124
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
-		}
126
-		$view->serviceHeader = $html;
127
-
128
-		/** client/html/catalog/detail/basket/service/standard/template-header
129
-		 * Relative path to the HTML header template of the catalog detail basket service client.
130
-		 *
131
-		 * The template file contains the HTML code and processing instructions
132
-		 * to generate the HTML code that is inserted into the HTML page header
133
-		 * of the rendered page in the frontend. The configuration string is the
134
-		 * path to the template file relative to the templates directory (usually
135
-		 * in client/html/templates).
136
-		 *
137
-		 * You can overwrite the template file configuration in extensions and
138
-		 * provide alternative templates. These alternative templates should be
139
-		 * named like the default one but with the string "standard" replaced by
140
-		 * an unique name. You may use the name of your project for this. If
141
-		 * you've implemented an alternative client class as well, "standard"
142
-		 * should be replaced by the name of the new class.
143
-		 *
144
-		 * @param string Relative path to the template creating code for the HTML page head
145
-		 * @since 2016.05
146
-		 * @category Developer
147
-		 * @see client/html/catalog/detail/basket/service/standard/template-body
148
-		 */
149
-		$tplconf = 'client/html/catalog/detail/basket/service/standard/template-header';
150
-		$default = 'catalog/detail/basket-service-header-default.php';
151
-
152
-		return $view->render( $view->config( $tplconf, $default ) );
153
-	}
154
-
155
-
156
-	/**
157
-	 * Returns the sub-client given by its name.
158
-	 *
159
-	 * @param string $type Name of the client type
160
-	 * @param string|null $name Name of the sub-client (Default if null)
161
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
162
-	 */
163
-	public function getSubClient( $type, $name = null )
164
-	{
165
-		/** client/html/catalog/detail/basket/service/decorators/excludes
166
-		 * Excludes decorators added by the "common" option from the catalog detail basket service html client
167
-		 *
168
-		 * Decorators extend the functionality of a class by adding new aspects
169
-		 * (e.g. log what is currently done), executing the methods of the underlying
170
-		 * class only in certain conditions (e.g. only for logged in users) or
171
-		 * modify what is returned to the caller.
172
-		 *
173
-		 * This option allows you to remove a decorator added via
174
-		 * "client/html/common/decorators/default" before they are wrapped
175
-		 * around the html client.
176
-		 *
177
-		 *  client/html/catalog/detail/basket/service/decorators/excludes = array( 'decorator1' )
178
-		 *
179
-		 * This would remove the decorator named "decorator1" from the list of
180
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
-		 * "client/html/common/decorators/default" to the html client.
182
-		 *
183
-		 * @param array List of decorator names
184
-		 * @since 2016.05
185
-		 * @category Developer
186
-		 * @see client/html/common/decorators/default
187
-		 * @see client/html/catalog/detail/basket/service/decorators/global
188
-		 * @see client/html/catalog/detail/basket/service/decorators/local
189
-		 */
190
-
191
-		/** client/html/catalog/detail/basket/service/decorators/global
192
-		 * Adds a list of globally available decorators only to the catalog detail basket service html client
193
-		 *
194
-		 * Decorators extend the functionality of a class by adding new aspects
195
-		 * (e.g. log what is currently done), executing the methods of the underlying
196
-		 * class only in certain conditions (e.g. only for logged in users) or
197
-		 * modify what is returned to the caller.
198
-		 *
199
-		 * This option allows you to wrap global decorators
200
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
-		 *
202
-		 *  client/html/catalog/detail/basket/service/decorators/global = array( 'decorator1' )
203
-		 *
204
-		 * This would add the decorator named "decorator1" defined by
205
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
-		 *
207
-		 * @param array List of decorator names
208
-		 * @since 2016.05
209
-		 * @category Developer
210
-		 * @see client/html/common/decorators/default
211
-		 * @see client/html/catalog/detail/basket/service/decorators/excludes
212
-		 * @see client/html/catalog/detail/basket/service/decorators/local
213
-		 */
214
-
215
-		/** client/html/catalog/detail/basket/service/decorators/local
216
-		 * Adds a list of local decorators only to the catalog detail basket service html client
217
-		 *
218
-		 * Decorators extend the functionality of a class by adding new aspects
219
-		 * (e.g. log what is currently done), executing the methods of the underlying
220
-		 * class only in certain conditions (e.g. only for logged in users) or
221
-		 * modify what is returned to the caller.
222
-		 *
223
-		 * This option allows you to wrap local decorators
224
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
-		 *
226
-		 *  client/html/catalog/detail/basket/service/decorators/local = array( 'decorator2' )
227
-		 *
228
-		 * This would add the decorator named "decorator2" defined by
229
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
-		 *
231
-		 * @param array List of decorator names
232
-		 * @since 2016.05
233
-		 * @category Developer
234
-		 * @see client/html/common/decorators/default
235
-		 * @see client/html/catalog/detail/basket/service/decorators/excludes
236
-		 * @see client/html/catalog/detail/basket/service/service/decorators/global
237
-		 */
238
-
239
-		return $this->createSubClient( 'catalog/detail/basket/service/' . $type, $name );
240
-	}
241
-
242
-
243
-	/**
244
-	 * Returns the list of sub-client names configured for the client.
245
-	 *
246
-	 * @return array List of HTML client names
247
-	 */
248
-	protected function getSubClientNames()
249
-	{
250
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
-	}
252
-
253
-
254
-	/**
255
-	 * Sets the necessary parameter values in the view.
256
-	 *
257
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
-	 * @param array &$tags Result array for the list of tags that are associated to the output
259
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
-	 * @return \Aimeos\MW\View\Iface Modified view object
261
-	 */
262
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
-	{
264
-		if( !isset( $this->cache ) )
265
-		{
266
-			$context = $this->getContext();
267
-			$config = $context->getConfig();
268
-
269
-			/** client/html/catalog/detail/basket/service/types
270
-			 * The service types available in the basket service template
271
-			 *
272
-			 * By default, only delivery services will be available in the
273
-			 * template but you can extend the list to payment services too.
274
-			 *
275
-			 * @param array List of type codes
276
-			 * @since 2016.05
277
-			 * @category Developer
278
-			 * @see client/html/catalog/detail/basket/service/domains
279
-			 */
280
-			$types = $config->get( 'client/html/catalog/detail/basket/service/types', array( 'delivery' ) );
281
-
282
-			$manager = \Aimeos\MShop\Factory::createManager( $context, 'service' );
283
-			$search = $manager->createSearch( true );
284
-
285
-			$expr = array(
286
-				$search->compare( '==', 'service.type.code', $types ),
287
-				$search->getConditions(),
288
-			);
289
-			$search->setConditions( $search->combine( '&&', $expr ) );
290
-
291
-			$sortation = array(
292
-				$search->sort( '+', 'service.type.code' ),
293
-				$search->sort( '+', 'service.position' ),
294
-			);
295
-			$search->setSortations( $sortation );
296
-
297
-			/** client/html/catalog/detail/basket/service/domains
298
-			 * A list of domain names whose items should be available for the services
299
-			 * in the basket services part of the catalog detail view templates
300
-			 *
301
-			 * Usually, service prices and texts are available in the templates
302
-			 * rendering basket services related data. If you want to
303
-			 * display additional content like the attributes, you can configure
304
-			 * your own list of domains (attribute, media, price, text,
305
-			 * etc. are domains) whose items are fetched from the storage.
306
-			 *
307
-			 * @param array List of domain names
308
-			 * @since 2016.05
309
-			 * @category Developer
310
-			 * @see client/html/catalog/detail/basket/service/types
311
-			 */
312
-			$domains = $config->get( 'client/html/catalog/detail/basket/service/domains', array( 'text', 'price' ) );
313
-
314
-			$services = $manager->searchItems( $search, $domains );
315
-
316
-			$this->addMetaItem( $services, 'service', $this->expire, $this->tags );
317
-			$this->addMetaList( array_keys( $services ), 'service', $this->expire );
318
-
319
-			$view->serviceItems = $services;
320
-
321
-			$this->cache = $view;
322
-		}
323
-
324
-		$expire = $this->expires( $this->expire, $expire );
325
-		$tags = array_merge( $tags, $this->tags );
326
-
327
-		return $this->cache;
328
-	}
24
+    /** client/html/catalog/detail/basket/service/standard/subparts
25
+     * List of HTML sub-clients rendered within the catalog detail basket attribute section
26
+     *
27
+     * The output of the frontend is composed of the code generated by the HTML
28
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
29
+     * that are responsible for rendering certain sub-parts of the output. The
30
+     * sub-clients can contain HTML clients themselves and therefore a
31
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
32
+     * the output that is placed inside the container of its parent.
33
+     *
34
+     * At first, always the HTML code generated by the parent is printed, then
35
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
36
+     * determines the order of the output of these sub-clients inside the parent
37
+     * container. If the configured list of clients is
38
+     *
39
+     *  array( "subclient1", "subclient2" )
40
+     *
41
+     * you can easily change the order of the output by reordering the subparts:
42
+     *
43
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
44
+     *
45
+     * You can also remove one or more parts if they shouldn't be rendered:
46
+     *
47
+     *  client/html/<clients>/subparts = array( "subclient1" )
48
+     *
49
+     * As the clients only generates structural HTML, the layout defined via CSS
50
+     * should support adding, removing or reordering content by a fluid like
51
+     * design.
52
+     *
53
+     * @param array List of sub-client names
54
+     * @since 2016.05
55
+     * @category Developer
56
+     */
57
+    private $subPartPath = 'client/html/catalog/detail/basket/service/standard/subparts';
58
+    private $subPartNames = array();
59
+
60
+    private $tags = array();
61
+    private $expire;
62
+    private $cache;
63
+
64
+
65
+    /**
66
+     * Returns the HTML code for insertion into the body.
67
+     *
68
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
+     * @param array &$tags Result array for the list of tags that are associated to the output
70
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
+     * @return string HTML code
72
+     */
73
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
+    {
75
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
76
+
77
+        $html = '';
78
+        foreach( $this->getSubClients() as $subclient ) {
79
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
+        }
81
+        $view->serviceBody = $html;
82
+
83
+        /** client/html/catalog/detail/basket/service/standard/template-body
84
+         * Relative path to the HTML body template of the catalog detail basket service client.
85
+         *
86
+         * The template file contains the HTML code and processing instructions
87
+         * to generate the result shown in the body of the frontend. The
88
+         * configuration string is the path to the template file relative
89
+         * to the templates directory (usually in client/html/templates).
90
+         *
91
+         * You can overwrite the template file configuration in extensions and
92
+         * provide alternative templates. These alternative templates should be
93
+         * named like the default one but with the string "standard" replaced by
94
+         * an unique name. You may use the name of your project for this. If
95
+         * you've implemented an alternative client class as well, "standard"
96
+         * should be replaced by the name of the new class.
97
+         *
98
+         * @param string Relative path to the template creating code for the HTML page body
99
+         * @since 2016.05
100
+         * @category Developer
101
+         * @see client/html/catalog/detail/basket/service/standard/template-header
102
+         */
103
+        $tplconf = 'client/html/catalog/detail/basket/service/standard/template-body';
104
+        $default = 'catalog/detail/basket-service-body-default.php';
105
+
106
+        return $view->render( $view->config( $tplconf, $default ) );
107
+    }
108
+
109
+
110
+    /**
111
+     * Returns the HTML string for insertion into the header.
112
+     *
113
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
+     * @param array &$tags Result array for the list of tags that are associated to the output
115
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
+     * @return string|null String including HTML tags for the header on error
117
+     */
118
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
+    {
120
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
121
+
122
+        $html = '';
123
+        foreach( $this->getSubClients() as $subclient ) {
124
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
+        }
126
+        $view->serviceHeader = $html;
127
+
128
+        /** client/html/catalog/detail/basket/service/standard/template-header
129
+         * Relative path to the HTML header template of the catalog detail basket service client.
130
+         *
131
+         * The template file contains the HTML code and processing instructions
132
+         * to generate the HTML code that is inserted into the HTML page header
133
+         * of the rendered page in the frontend. The configuration string is the
134
+         * path to the template file relative to the templates directory (usually
135
+         * in client/html/templates).
136
+         *
137
+         * You can overwrite the template file configuration in extensions and
138
+         * provide alternative templates. These alternative templates should be
139
+         * named like the default one but with the string "standard" replaced by
140
+         * an unique name. You may use the name of your project for this. If
141
+         * you've implemented an alternative client class as well, "standard"
142
+         * should be replaced by the name of the new class.
143
+         *
144
+         * @param string Relative path to the template creating code for the HTML page head
145
+         * @since 2016.05
146
+         * @category Developer
147
+         * @see client/html/catalog/detail/basket/service/standard/template-body
148
+         */
149
+        $tplconf = 'client/html/catalog/detail/basket/service/standard/template-header';
150
+        $default = 'catalog/detail/basket-service-header-default.php';
151
+
152
+        return $view->render( $view->config( $tplconf, $default ) );
153
+    }
154
+
155
+
156
+    /**
157
+     * Returns the sub-client given by its name.
158
+     *
159
+     * @param string $type Name of the client type
160
+     * @param string|null $name Name of the sub-client (Default if null)
161
+     * @return \Aimeos\Client\Html\Iface Sub-client object
162
+     */
163
+    public function getSubClient( $type, $name = null )
164
+    {
165
+        /** client/html/catalog/detail/basket/service/decorators/excludes
166
+         * Excludes decorators added by the "common" option from the catalog detail basket service html client
167
+         *
168
+         * Decorators extend the functionality of a class by adding new aspects
169
+         * (e.g. log what is currently done), executing the methods of the underlying
170
+         * class only in certain conditions (e.g. only for logged in users) or
171
+         * modify what is returned to the caller.
172
+         *
173
+         * This option allows you to remove a decorator added via
174
+         * "client/html/common/decorators/default" before they are wrapped
175
+         * around the html client.
176
+         *
177
+         *  client/html/catalog/detail/basket/service/decorators/excludes = array( 'decorator1' )
178
+         *
179
+         * This would remove the decorator named "decorator1" from the list of
180
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
+         * "client/html/common/decorators/default" to the html client.
182
+         *
183
+         * @param array List of decorator names
184
+         * @since 2016.05
185
+         * @category Developer
186
+         * @see client/html/common/decorators/default
187
+         * @see client/html/catalog/detail/basket/service/decorators/global
188
+         * @see client/html/catalog/detail/basket/service/decorators/local
189
+         */
190
+
191
+        /** client/html/catalog/detail/basket/service/decorators/global
192
+         * Adds a list of globally available decorators only to the catalog detail basket service html client
193
+         *
194
+         * Decorators extend the functionality of a class by adding new aspects
195
+         * (e.g. log what is currently done), executing the methods of the underlying
196
+         * class only in certain conditions (e.g. only for logged in users) or
197
+         * modify what is returned to the caller.
198
+         *
199
+         * This option allows you to wrap global decorators
200
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
+         *
202
+         *  client/html/catalog/detail/basket/service/decorators/global = array( 'decorator1' )
203
+         *
204
+         * This would add the decorator named "decorator1" defined by
205
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
+         *
207
+         * @param array List of decorator names
208
+         * @since 2016.05
209
+         * @category Developer
210
+         * @see client/html/common/decorators/default
211
+         * @see client/html/catalog/detail/basket/service/decorators/excludes
212
+         * @see client/html/catalog/detail/basket/service/decorators/local
213
+         */
214
+
215
+        /** client/html/catalog/detail/basket/service/decorators/local
216
+         * Adds a list of local decorators only to the catalog detail basket service html client
217
+         *
218
+         * Decorators extend the functionality of a class by adding new aspects
219
+         * (e.g. log what is currently done), executing the methods of the underlying
220
+         * class only in certain conditions (e.g. only for logged in users) or
221
+         * modify what is returned to the caller.
222
+         *
223
+         * This option allows you to wrap local decorators
224
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
+         *
226
+         *  client/html/catalog/detail/basket/service/decorators/local = array( 'decorator2' )
227
+         *
228
+         * This would add the decorator named "decorator2" defined by
229
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
+         *
231
+         * @param array List of decorator names
232
+         * @since 2016.05
233
+         * @category Developer
234
+         * @see client/html/common/decorators/default
235
+         * @see client/html/catalog/detail/basket/service/decorators/excludes
236
+         * @see client/html/catalog/detail/basket/service/service/decorators/global
237
+         */
238
+
239
+        return $this->createSubClient( 'catalog/detail/basket/service/' . $type, $name );
240
+    }
241
+
242
+
243
+    /**
244
+     * Returns the list of sub-client names configured for the client.
245
+     *
246
+     * @return array List of HTML client names
247
+     */
248
+    protected function getSubClientNames()
249
+    {
250
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
+    }
252
+
253
+
254
+    /**
255
+     * Sets the necessary parameter values in the view.
256
+     *
257
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
+     * @param array &$tags Result array for the list of tags that are associated to the output
259
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
+     * @return \Aimeos\MW\View\Iface Modified view object
261
+     */
262
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
+    {
264
+        if( !isset( $this->cache ) )
265
+        {
266
+            $context = $this->getContext();
267
+            $config = $context->getConfig();
268
+
269
+            /** client/html/catalog/detail/basket/service/types
270
+             * The service types available in the basket service template
271
+             *
272
+             * By default, only delivery services will be available in the
273
+             * template but you can extend the list to payment services too.
274
+             *
275
+             * @param array List of type codes
276
+             * @since 2016.05
277
+             * @category Developer
278
+             * @see client/html/catalog/detail/basket/service/domains
279
+             */
280
+            $types = $config->get( 'client/html/catalog/detail/basket/service/types', array( 'delivery' ) );
281
+
282
+            $manager = \Aimeos\MShop\Factory::createManager( $context, 'service' );
283
+            $search = $manager->createSearch( true );
284
+
285
+            $expr = array(
286
+                $search->compare( '==', 'service.type.code', $types ),
287
+                $search->getConditions(),
288
+            );
289
+            $search->setConditions( $search->combine( '&&', $expr ) );
290
+
291
+            $sortation = array(
292
+                $search->sort( '+', 'service.type.code' ),
293
+                $search->sort( '+', 'service.position' ),
294
+            );
295
+            $search->setSortations( $sortation );
296
+
297
+            /** client/html/catalog/detail/basket/service/domains
298
+             * A list of domain names whose items should be available for the services
299
+             * in the basket services part of the catalog detail view templates
300
+             *
301
+             * Usually, service prices and texts are available in the templates
302
+             * rendering basket services related data. If you want to
303
+             * display additional content like the attributes, you can configure
304
+             * your own list of domains (attribute, media, price, text,
305
+             * etc. are domains) whose items are fetched from the storage.
306
+             *
307
+             * @param array List of domain names
308
+             * @since 2016.05
309
+             * @category Developer
310
+             * @see client/html/catalog/detail/basket/service/types
311
+             */
312
+            $domains = $config->get( 'client/html/catalog/detail/basket/service/domains', array( 'text', 'price' ) );
313
+
314
+            $services = $manager->searchItems( $search, $domains );
315
+
316
+            $this->addMetaItem( $services, 'service', $this->expire, $this->tags );
317
+            $this->addMetaList( array_keys( $services ), 'service', $this->expire );
318
+
319
+            $view->serviceItems = $services;
320
+
321
+            $this->cache = $view;
322
+        }
323
+
324
+        $expire = $this->expires( $this->expire, $expire );
325
+        $tags = array_merge( $tags, $this->tags );
326
+
327
+        return $this->cache;
328
+    }
329 329
 }
330 330
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Basket/Attribute/Standard.php 1 patch
Indentation   +238 added lines, -238 removed lines patch added patch discarded remove patch
@@ -19,266 +19,266 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/basket/attribute/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail basket attribute section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/basket/attribute/standard/subparts';
59
-	private $subPartNames = array();
60
-	private $cache;
25
+    /** client/html/catalog/detail/basket/attribute/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail basket attribute section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/basket/attribute/standard/subparts';
59
+    private $subPartNames = array();
60
+    private $cache;
61 61
 
62 62
 
63
-	/**
64
-	 * Returns the HTML code for insertion into the body.
65
-	 *
66
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
67
-	 * @param array &$tags Result array for the list of tags that are associated to the output
68
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
69
-	 * @return string HTML code
70
-	 */
71
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
72
-	{
73
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
63
+    /**
64
+     * Returns the HTML code for insertion into the body.
65
+     *
66
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
67
+     * @param array &$tags Result array for the list of tags that are associated to the output
68
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
69
+     * @return string HTML code
70
+     */
71
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
72
+    {
73
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
74 74
 
75
-		$html = '';
76
-		foreach( $this->getSubClients() as $subclient ) {
77
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
78
-		}
79
-		$view->attributeBody = $html;
75
+        $html = '';
76
+        foreach( $this->getSubClients() as $subclient ) {
77
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
78
+        }
79
+        $view->attributeBody = $html;
80 80
 
81
-		/** client/html/catalog/detail/basket/attribute/standard/template-body
82
-		 * Relative path to the HTML body template of the catalog detail basket attribute client.
83
-		 *
84
-		 * The template file contains the HTML code and processing instructions
85
-		 * to generate the result shown in the body of the frontend. The
86
-		 * configuration string is the path to the template file relative
87
-		 * to the templates directory (usually in client/html/templates).
88
-		 *
89
-		 * You can overwrite the template file configuration in extensions and
90
-		 * provide alternative templates. These alternative templates should be
91
-		 * named like the default one but with the string "standard" replaced by
92
-		 * an unique name. You may use the name of your project for this. If
93
-		 * you've implemented an alternative client class as well, "standard"
94
-		 * should be replaced by the name of the new class.
95
-		 *
96
-		 * @param string Relative path to the template creating code for the HTML page body
97
-		 * @since 2014.03
98
-		 * @category Developer
99
-		 * @see client/html/catalog/detail/basket/attribute/standard/template-header
100
-		 */
101
-		$tplconf = 'client/html/catalog/detail/basket/attribute/standard/template-body';
102
-		$default = 'catalog/detail/basket-attribute-body-default.php';
81
+        /** client/html/catalog/detail/basket/attribute/standard/template-body
82
+         * Relative path to the HTML body template of the catalog detail basket attribute client.
83
+         *
84
+         * The template file contains the HTML code and processing instructions
85
+         * to generate the result shown in the body of the frontend. The
86
+         * configuration string is the path to the template file relative
87
+         * to the templates directory (usually in client/html/templates).
88
+         *
89
+         * You can overwrite the template file configuration in extensions and
90
+         * provide alternative templates. These alternative templates should be
91
+         * named like the default one but with the string "standard" replaced by
92
+         * an unique name. You may use the name of your project for this. If
93
+         * you've implemented an alternative client class as well, "standard"
94
+         * should be replaced by the name of the new class.
95
+         *
96
+         * @param string Relative path to the template creating code for the HTML page body
97
+         * @since 2014.03
98
+         * @category Developer
99
+         * @see client/html/catalog/detail/basket/attribute/standard/template-header
100
+         */
101
+        $tplconf = 'client/html/catalog/detail/basket/attribute/standard/template-body';
102
+        $default = 'catalog/detail/basket-attribute-body-default.php';
103 103
 
104
-		return $view->render( $view->config( $tplconf, $default ) );
105
-	}
104
+        return $view->render( $view->config( $tplconf, $default ) );
105
+    }
106 106
 
107 107
 
108
-	/**
109
-	 * Returns the HTML string for insertion into the header.
110
-	 *
111
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
112
-	 * @param array &$tags Result array for the list of tags that are associated to the output
113
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
114
-	 * @return string|null String including HTML tags for the header on error
115
-	 */
116
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
117
-	{
118
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
108
+    /**
109
+     * Returns the HTML string for insertion into the header.
110
+     *
111
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
112
+     * @param array &$tags Result array for the list of tags that are associated to the output
113
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
114
+     * @return string|null String including HTML tags for the header on error
115
+     */
116
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
117
+    {
118
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
119 119
 
120
-		$html = '';
121
-		foreach( $this->getSubClients() as $subclient ) {
122
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
123
-		}
124
-		$view->attributeHeader = $html;
120
+        $html = '';
121
+        foreach( $this->getSubClients() as $subclient ) {
122
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
123
+        }
124
+        $view->attributeHeader = $html;
125 125
 
126
-		/** client/html/catalog/detail/basket/attribute/standard/template-header
127
-		 * Relative path to the HTML header template of the catalog detail basket attribute client.
128
-		 *
129
-		 * The template file contains the HTML code and processing instructions
130
-		 * to generate the HTML code that is inserted into the HTML page header
131
-		 * of the rendered page in the frontend. The configuration string is the
132
-		 * path to the template file relative to the templates directory (usually
133
-		 * in client/html/templates).
134
-		 *
135
-		 * You can overwrite the template file configuration in extensions and
136
-		 * provide alternative templates. These alternative templates should be
137
-		 * named like the default one but with the string "standard" replaced by
138
-		 * an unique name. You may use the name of your project for this. If
139
-		 * you've implemented an alternative client class as well, "standard"
140
-		 * should be replaced by the name of the new class.
141
-		 *
142
-		 * @param string Relative path to the template creating code for the HTML page head
143
-		 * @since 2014.03
144
-		 * @category Developer
145
-		 * @see client/html/catalog/detail/basket/attribute/standard/template-body
146
-		 */
147
-		$tplconf = 'client/html/catalog/detail/basket/attribute/standard/template-header';
148
-		$default = 'catalog/detail/basket-attribute-header-default.php';
126
+        /** client/html/catalog/detail/basket/attribute/standard/template-header
127
+         * Relative path to the HTML header template of the catalog detail basket attribute client.
128
+         *
129
+         * The template file contains the HTML code and processing instructions
130
+         * to generate the HTML code that is inserted into the HTML page header
131
+         * of the rendered page in the frontend. The configuration string is the
132
+         * path to the template file relative to the templates directory (usually
133
+         * in client/html/templates).
134
+         *
135
+         * You can overwrite the template file configuration in extensions and
136
+         * provide alternative templates. These alternative templates should be
137
+         * named like the default one but with the string "standard" replaced by
138
+         * an unique name. You may use the name of your project for this. If
139
+         * you've implemented an alternative client class as well, "standard"
140
+         * should be replaced by the name of the new class.
141
+         *
142
+         * @param string Relative path to the template creating code for the HTML page head
143
+         * @since 2014.03
144
+         * @category Developer
145
+         * @see client/html/catalog/detail/basket/attribute/standard/template-body
146
+         */
147
+        $tplconf = 'client/html/catalog/detail/basket/attribute/standard/template-header';
148
+        $default = 'catalog/detail/basket-attribute-header-default.php';
149 149
 
150
-		return $view->render( $view->config( $tplconf, $default ) );
151
-	}
150
+        return $view->render( $view->config( $tplconf, $default ) );
151
+    }
152 152
 
153 153
 
154
-	/**
155
-	 * Returns the sub-client given by its name.
156
-	 *
157
-	 * @param string $type Name of the client type
158
-	 * @param string|null $name Name of the sub-client (Default if null)
159
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
160
-	 */
161
-	public function getSubClient( $type, $name = null )
162
-	{
163
-		/** client/html/catalog/detail/basket/attribute/decorators/excludes
164
-		 * Excludes decorators added by the "common" option from the catalog detail basket attribute html client
165
-		 *
166
-		 * Decorators extend the functionality of a class by adding new aspects
167
-		 * (e.g. log what is currently done), executing the methods of the underlying
168
-		 * class only in certain conditions (e.g. only for logged in users) or
169
-		 * modify what is returned to the caller.
170
-		 *
171
-		 * This option allows you to remove a decorator added via
172
-		 * "client/html/common/decorators/default" before they are wrapped
173
-		 * around the html client.
174
-		 *
175
-		 *  client/html/catalog/detail/basket/attribute/decorators/excludes = array( 'decorator1' )
176
-		 *
177
-		 * This would remove the decorator named "decorator1" from the list of
178
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
179
-		 * "client/html/common/decorators/default" to the html client.
180
-		 *
181
-		 * @param array List of decorator names
182
-		 * @since 2015.08
183
-		 * @category Developer
184
-		 * @see client/html/common/decorators/default
185
-		 * @see client/html/catalog/detail/basket/attribute/decorators/global
186
-		 * @see client/html/catalog/detail/basket/attribute/decorators/local
187
-		 */
154
+    /**
155
+     * Returns the sub-client given by its name.
156
+     *
157
+     * @param string $type Name of the client type
158
+     * @param string|null $name Name of the sub-client (Default if null)
159
+     * @return \Aimeos\Client\Html\Iface Sub-client object
160
+     */
161
+    public function getSubClient( $type, $name = null )
162
+    {
163
+        /** client/html/catalog/detail/basket/attribute/decorators/excludes
164
+         * Excludes decorators added by the "common" option from the catalog detail basket attribute html client
165
+         *
166
+         * Decorators extend the functionality of a class by adding new aspects
167
+         * (e.g. log what is currently done), executing the methods of the underlying
168
+         * class only in certain conditions (e.g. only for logged in users) or
169
+         * modify what is returned to the caller.
170
+         *
171
+         * This option allows you to remove a decorator added via
172
+         * "client/html/common/decorators/default" before they are wrapped
173
+         * around the html client.
174
+         *
175
+         *  client/html/catalog/detail/basket/attribute/decorators/excludes = array( 'decorator1' )
176
+         *
177
+         * This would remove the decorator named "decorator1" from the list of
178
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
179
+         * "client/html/common/decorators/default" to the html client.
180
+         *
181
+         * @param array List of decorator names
182
+         * @since 2015.08
183
+         * @category Developer
184
+         * @see client/html/common/decorators/default
185
+         * @see client/html/catalog/detail/basket/attribute/decorators/global
186
+         * @see client/html/catalog/detail/basket/attribute/decorators/local
187
+         */
188 188
 
189
-		/** client/html/catalog/detail/basket/attribute/decorators/global
190
-		 * Adds a list of globally available decorators only to the catalog detail basket attribute html client
191
-		 *
192
-		 * Decorators extend the functionality of a class by adding new aspects
193
-		 * (e.g. log what is currently done), executing the methods of the underlying
194
-		 * class only in certain conditions (e.g. only for logged in users) or
195
-		 * modify what is returned to the caller.
196
-		 *
197
-		 * This option allows you to wrap global decorators
198
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
199
-		 *
200
-		 *  client/html/catalog/detail/basket/attribute/decorators/global = array( 'decorator1' )
201
-		 *
202
-		 * This would add the decorator named "decorator1" defined by
203
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
204
-		 *
205
-		 * @param array List of decorator names
206
-		 * @since 2015.08
207
-		 * @category Developer
208
-		 * @see client/html/common/decorators/default
209
-		 * @see client/html/catalog/detail/basket/attribute/decorators/excludes
210
-		 * @see client/html/catalog/detail/basket/attribute/decorators/local
211
-		 */
189
+        /** client/html/catalog/detail/basket/attribute/decorators/global
190
+         * Adds a list of globally available decorators only to the catalog detail basket attribute html client
191
+         *
192
+         * Decorators extend the functionality of a class by adding new aspects
193
+         * (e.g. log what is currently done), executing the methods of the underlying
194
+         * class only in certain conditions (e.g. only for logged in users) or
195
+         * modify what is returned to the caller.
196
+         *
197
+         * This option allows you to wrap global decorators
198
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
199
+         *
200
+         *  client/html/catalog/detail/basket/attribute/decorators/global = array( 'decorator1' )
201
+         *
202
+         * This would add the decorator named "decorator1" defined by
203
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
204
+         *
205
+         * @param array List of decorator names
206
+         * @since 2015.08
207
+         * @category Developer
208
+         * @see client/html/common/decorators/default
209
+         * @see client/html/catalog/detail/basket/attribute/decorators/excludes
210
+         * @see client/html/catalog/detail/basket/attribute/decorators/local
211
+         */
212 212
 
213
-		/** client/html/catalog/detail/basket/attribute/decorators/local
214
-		 * Adds a list of local decorators only to the catalog detail basket attribute html client
215
-		 *
216
-		 * Decorators extend the functionality of a class by adding new aspects
217
-		 * (e.g. log what is currently done), executing the methods of the underlying
218
-		 * class only in certain conditions (e.g. only for logged in users) or
219
-		 * modify what is returned to the caller.
220
-		 *
221
-		 * This option allows you to wrap local decorators
222
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
223
-		 *
224
-		 *  client/html/catalog/detail/basket/attribute/decorators/local = array( 'decorator2' )
225
-		 *
226
-		 * This would add the decorator named "decorator2" defined by
227
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
228
-		 *
229
-		 * @param array List of decorator names
230
-		 * @since 2015.08
231
-		 * @category Developer
232
-		 * @see client/html/common/decorators/default
233
-		 * @see client/html/catalog/detail/basket/attribute/decorators/excludes
234
-		 * @see client/html/catalog/detail/basket/attribute/attribute/decorators/global
235
-		 */
213
+        /** client/html/catalog/detail/basket/attribute/decorators/local
214
+         * Adds a list of local decorators only to the catalog detail basket attribute html client
215
+         *
216
+         * Decorators extend the functionality of a class by adding new aspects
217
+         * (e.g. log what is currently done), executing the methods of the underlying
218
+         * class only in certain conditions (e.g. only for logged in users) or
219
+         * modify what is returned to the caller.
220
+         *
221
+         * This option allows you to wrap local decorators
222
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
223
+         *
224
+         *  client/html/catalog/detail/basket/attribute/decorators/local = array( 'decorator2' )
225
+         *
226
+         * This would add the decorator named "decorator2" defined by
227
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
228
+         *
229
+         * @param array List of decorator names
230
+         * @since 2015.08
231
+         * @category Developer
232
+         * @see client/html/common/decorators/default
233
+         * @see client/html/catalog/detail/basket/attribute/decorators/excludes
234
+         * @see client/html/catalog/detail/basket/attribute/attribute/decorators/global
235
+         */
236 236
 
237
-		return $this->createSubClient( 'catalog/detail/basket/attribute/' . $type, $name );
238
-	}
237
+        return $this->createSubClient( 'catalog/detail/basket/attribute/' . $type, $name );
238
+    }
239 239
 
240 240
 
241
-	/**
242
-	 * Returns the list of sub-client names configured for the client.
243
-	 *
244
-	 * @return array List of HTML client names
245
-	 */
246
-	protected function getSubClientNames()
247
-	{
248
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
249
-	}
241
+    /**
242
+     * Returns the list of sub-client names configured for the client.
243
+     *
244
+     * @return array List of HTML client names
245
+     */
246
+    protected function getSubClientNames()
247
+    {
248
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
249
+    }
250 250
 
251 251
 
252
-	/**
253
-	 * Sets the necessary parameter values in the view.
254
-	 *
255
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
256
-	 * @param array &$tags Result array for the list of tags that are associated to the output
257
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
258
-	 * @return \Aimeos\MW\View\Iface Modified view object
259
-	 */
260
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
261
-	{
262
-		if( !isset( $this->cache ) )
263
-		{
264
-			$attributeTypes = array();
265
-			$attrItems = $view->get( 'detailProductAttributeItems', array() );
266
-			$configAttributes = $view->detailProductItem->getRefItems( 'attribute', null, 'config' );
252
+    /**
253
+     * Sets the necessary parameter values in the view.
254
+     *
255
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
256
+     * @param array &$tags Result array for the list of tags that are associated to the output
257
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
258
+     * @return \Aimeos\MW\View\Iface Modified view object
259
+     */
260
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
261
+    {
262
+        if( !isset( $this->cache ) )
263
+        {
264
+            $attributeTypes = array();
265
+            $attrItems = $view->get( 'detailProductAttributeItems', array() );
266
+            $configAttributes = $view->detailProductItem->getRefItems( 'attribute', null, 'config' );
267 267
 
268
-			foreach( $configAttributes as $id => $attribute )
269
-			{
270
-				if( isset( $attrItems[$id] ) ) {
271
-					$attributeTypes[$attrItems[$id]->getType()][$id] = $attrItems[$id];
272
-				}
273
-			}
268
+            foreach( $configAttributes as $id => $attribute )
269
+            {
270
+                if( isset( $attrItems[$id] ) ) {
271
+                    $attributeTypes[$attrItems[$id]->getType()][$id] = $attrItems[$id];
272
+                }
273
+            }
274 274
 
275
-			$view->attributeConfigItems = $attributeTypes;
276
-			$view->attributeCustomItems = $view->detailProductItem->getRefItems( 'attribute', null, 'custom' );
277
-			$view->attributeHiddenItems = $view->detailProductItem->getRefItems( 'attribute', null, 'hidden' );
275
+            $view->attributeConfigItems = $attributeTypes;
276
+            $view->attributeCustomItems = $view->detailProductItem->getRefItems( 'attribute', null, 'custom' );
277
+            $view->attributeHiddenItems = $view->detailProductItem->getRefItems( 'attribute', null, 'hidden' );
278 278
 
279
-			$this->cache = $view;
280
-		}
279
+            $this->cache = $view;
280
+        }
281 281
 
282
-		return $this->cache;
283
-	}
282
+        return $this->cache;
283
+    }
284 284
 }
285 285
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Basket/Standard.php 1 patch
Indentation   +321 added lines, -321 removed lines patch added patch discarded remove patch
@@ -19,326 +19,326 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/basket/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail basket section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/basket/standard/subparts';
59
-
60
-	/** client/html/catalog/detail/basket/selection/name
61
-	 * Name of the selection part used by the catalog detail basket client implementation
62
-	 *
63
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Selection\Myname".
64
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
65
-	 *
66
-	 * @param string Last part of the client class name
67
-	 * @since 2014.03
68
-	 * @category Developer
69
-	 */
70
-
71
-	/** client/html/catalog/detail/basket/attribute/name
72
-	 * Name of the attribute part used by the catalog detail basket client implementation
73
-	 *
74
-	 * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Attribute\Myname".
75
-	 * The name is case-sensitive and you should avoid camel case names like "MyName".
76
-	 *
77
-	 * @param string Last part of the client class name
78
-	 * @since 2014.03
79
-	 * @category Developer
80
-	 */
81
-	private $subPartNames = array( 'service', 'selection', 'attribute' );
82
-	private $cache;
83
-
84
-
85
-	/**
86
-	 * Returns the HTML code for insertion into the body.
87
-	 *
88
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
89
-	 * @param array &$tags Result array for the list of tags that are associated to the output
90
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
91
-	 * @return string HTML code
92
-	 */
93
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
94
-	{
95
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
96
-
97
-		$html = '';
98
-		foreach( $this->getSubClients() as $subclient ) {
99
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
100
-		}
101
-		$view->basketBody = $html;
102
-
103
-		/** client/html/catalog/detail/basket/standard/template-body
104
-		 * Relative path to the HTML body template of the catalog detail basket client.
105
-		 *
106
-		 * The template file contains the HTML code and processing instructions
107
-		 * to generate the result shown in the body of the frontend. The
108
-		 * configuration string is the path to the template file relative
109
-		 * to the templates directory (usually in client/html/templates).
110
-		 *
111
-		 * You can overwrite the template file configuration in extensions and
112
-		 * provide alternative templates. These alternative templates should be
113
-		 * named like the default one but with the string "standard" replaced by
114
-		 * an unique name. You may use the name of your project for this. If
115
-		 * you've implemented an alternative client class as well, "standard"
116
-		 * should be replaced by the name of the new class.
117
-		 *
118
-		 * @param string Relative path to the template creating code for the HTML page body
119
-		 * @since 2014.03
120
-		 * @category Developer
121
-		 * @see client/html/catalog/detail/basket/standard/template-header
122
-		 */
123
-		$tplconf = 'client/html/catalog/detail/basket/standard/template-body';
124
-		$default = 'catalog/detail/basket-body-default.php';
125
-
126
-		return $view->render( $view->config( $tplconf, $default ) );
127
-	}
128
-
129
-
130
-	/**
131
-	 * Returns the HTML string for insertion into the header.
132
-	 *
133
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
134
-	 * @param array &$tags Result array for the list of tags that are associated to the output
135
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
136
-	 * @return string|null String including HTML tags for the header on error
137
-	 */
138
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
139
-	{
140
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
141
-
142
-		$html = '';
143
-		foreach( $this->getSubClients() as $subclient ) {
144
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
145
-		}
146
-		$view->basketHeader = $html;
147
-
148
-		/** client/html/catalog/detail/basket/standard/template-header
149
-		 * Relative path to the HTML header template of the catalog detail basket client.
150
-		 *
151
-		 * The template file contains the HTML code and processing instructions
152
-		 * to generate the HTML code that is inserted into the HTML page header
153
-		 * of the rendered page in the frontend. The configuration string is the
154
-		 * path to the template file relative to the templates directory (usually
155
-		 * in client/html/templates).
156
-		 *
157
-		 * You can overwrite the template file configuration in extensions and
158
-		 * provide alternative templates. These alternative templates should be
159
-		 * named like the default one but with the string "standard" replaced by
160
-		 * an unique name. You may use the name of your project for this. If
161
-		 * you've implemented an alternative client class as well, "standard"
162
-		 * should be replaced by the name of the new class.
163
-		 *
164
-		 * @param string Relative path to the template creating code for the HTML page head
165
-		 * @since 2014.03
166
-		 * @category Developer
167
-		 * @see client/html/catalog/detail/basket/standard/template-body
168
-		 */
169
-		$tplconf = 'client/html/catalog/detail/basket/standard/template-header';
170
-		$default = 'catalog/detail/basket-header-default.php';
171
-
172
-		return $view->render( $view->config( $tplconf, $default ) );
173
-	}
174
-
175
-
176
-	/**
177
-	 * Returns the sub-client given by its name.
178
-	 *
179
-	 * @param string $type Name of the client type
180
-	 * @param string|null $name Name of the sub-client (Default if null)
181
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
182
-	 */
183
-	public function getSubClient( $type, $name = null )
184
-	{
185
-		/** client/html/catalog/detail/basket/decorators/excludes
186
-		 * Excludes decorators added by the "common" option from the catalog detail basket html client
187
-		 *
188
-		 * Decorators extend the functionality of a class by adding new aspects
189
-		 * (e.g. log what is currently done), executing the methods of the underlying
190
-		 * class only in certain conditions (e.g. only for logged in users) or
191
-		 * modify what is returned to the caller.
192
-		 *
193
-		 * This option allows you to remove a decorator added via
194
-		 * "client/html/common/decorators/default" before they are wrapped
195
-		 * around the html client.
196
-		 *
197
-		 *  client/html/catalog/detail/basket/decorators/excludes = array( 'decorator1' )
198
-		 *
199
-		 * This would remove the decorator named "decorator1" from the list of
200
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
201
-		 * "client/html/common/decorators/default" to the html client.
202
-		 *
203
-		 * @param array List of decorator names
204
-		 * @since 2015.08
205
-		 * @category Developer
206
-		 * @see client/html/common/decorators/default
207
-		 * @see client/html/catalog/detail/basket/decorators/global
208
-		 * @see client/html/catalog/detail/basket/decorators/local
209
-		 */
210
-
211
-		/** client/html/catalog/detail/basket/decorators/global
212
-		 * Adds a list of globally available decorators only to the catalog detail basket html client
213
-		 *
214
-		 * Decorators extend the functionality of a class by adding new aspects
215
-		 * (e.g. log what is currently done), executing the methods of the underlying
216
-		 * class only in certain conditions (e.g. only for logged in users) or
217
-		 * modify what is returned to the caller.
218
-		 *
219
-		 * This option allows you to wrap global decorators
220
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
221
-		 *
222
-		 *  client/html/catalog/detail/basket/decorators/global = array( 'decorator1' )
223
-		 *
224
-		 * This would add the decorator named "decorator1" defined by
225
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
226
-		 *
227
-		 * @param array List of decorator names
228
-		 * @since 2015.08
229
-		 * @category Developer
230
-		 * @see client/html/common/decorators/default
231
-		 * @see client/html/catalog/detail/basket/decorators/excludes
232
-		 * @see client/html/catalog/detail/basket/decorators/local
233
-		 */
234
-
235
-		/** client/html/catalog/detail/basket/decorators/local
236
-		 * Adds a list of local decorators only to the catalog detail basket html client
237
-		 *
238
-		 * Decorators extend the functionality of a class by adding new aspects
239
-		 * (e.g. log what is currently done), executing the methods of the underlying
240
-		 * class only in certain conditions (e.g. only for logged in users) or
241
-		 * modify what is returned to the caller.
242
-		 *
243
-		 * This option allows you to wrap local decorators
244
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
245
-		 *
246
-		 *  client/html/catalog/detail/basket/decorators/local = array( 'decorator2' )
247
-		 *
248
-		 * This would add the decorator named "decorator2" defined by
249
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
250
-		 *
251
-		 * @param array List of decorator names
252
-		 * @since 2015.08
253
-		 * @category Developer
254
-		 * @see client/html/common/decorators/default
255
-		 * @see client/html/catalog/detail/basket/decorators/excludes
256
-		 * @see client/html/catalog/detail/basket/decorators/global
257
-		 */
258
-
259
-		return $this->createSubClient( 'catalog/detail/basket/' . $type, $name );
260
-	}
261
-
262
-
263
-	/**
264
-	 * Modifies the cached body content to replace content based on sessions or cookies.
265
-	 *
266
-	 * @param string $content Cached content
267
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
268
-	 * @return string Modified body content
269
-	 */
270
-	public function modifyBody( $content, $uid )
271
-	{
272
-		$content = parent::modifyBody( $content, $uid );
273
-
274
-		return $this->replaceSection( $content, $this->getView()->csrf()->formfield(), 'catalog.detail.basket.csrf' );
275
-	}
276
-
277
-
278
-	/**
279
-	 * Returns the list of sub-client names configured for the client.
280
-	 *
281
-	 * @return array List of HTML client names
282
-	 */
283
-	protected function getSubClientNames()
284
-	{
285
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
286
-	}
287
-
288
-
289
-	/**
290
-	 * Sets the necessary parameter values in the view.
291
-	 *
292
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
293
-	 * @param array &$tags Result array for the list of tags that are associated to the output
294
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
295
-	 * @return \Aimeos\MW\View\Iface Modified view object
296
-	 */
297
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
298
-	{
299
-		if( !isset( $this->cache ) )
300
-		{
301
-			$config = $this->getContext()->getConfig();
302
-
303
-			/** client/html/catalog/detail/stock/enable
304
-			 * Enables or disables displaying product stock levels in product detail view
305
-			 *
306
-			 * This configuration option allows shop owners to display product
307
-			 * stock levels for each product in the detail views or to disable
308
-			 * fetching product stock information.
309
-			 *
310
-			 * The stock information is fetched via AJAX and inserted via Javascript.
311
-			 * This allows to cache product items by leaving out such highly
312
-			 * dynamic content like stock levels which changes with each order.
313
-			 *
314
-			 * @param boolean Value of "1" to display stock levels, "0" to disable displaying them
315
-			 * @since 2014.03
316
-			 * @category User
317
-			 * @category Developer
318
-			 * @see client/html/catalog/lists/stock/enable
319
-			 * @see client/html/catalog/stock/url/target
320
-			 * @see client/html/catalog/stock/url/controller
321
-			 * @see client/html/catalog/stock/url/action
322
-			 * @see client/html/catalog/stock/url/config
323
-			 */
324
-			if( isset( $view->detailProductItem ) && $config->get( 'client/html/catalog/detail/stock/enable', true ) === true )
325
-			{
326
-				$stockTarget = $config->get( 'client/html/catalog/stock/url/target' );
327
-				$stockController = $config->get( 'client/html/catalog/stock/url/controller', 'catalog' );
328
-				$stockAction = $config->get( 'client/html/catalog/stock/url/action', 'stock' );
329
-				$stockConfig = $config->get( 'client/html/catalog/stock/url/config', array() );
330
-
331
-				$prodIds = array_keys( $view->detailProductItem->getRefItems( 'product', null, 'default' ) );
332
-				array_unshift( $prodIds, $view->detailProductItem->getId() );
333
-				$params = array( 's_prodid' => $prodIds );
334
-
335
-				$view->basketStockUrl = $view->url( $stockTarget, $stockController, $stockAction, $params, array(), $stockConfig );
336
-				$view->basketProductIds = $prodIds;
337
-			}
338
-
339
-			$this->cache = $view;
340
-		}
341
-
342
-		return $this->cache;
343
-	}
25
+    /** client/html/catalog/detail/basket/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail basket section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/basket/standard/subparts';
59
+
60
+    /** client/html/catalog/detail/basket/selection/name
61
+     * Name of the selection part used by the catalog detail basket client implementation
62
+     *
63
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Selection\Myname".
64
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
65
+     *
66
+     * @param string Last part of the client class name
67
+     * @since 2014.03
68
+     * @category Developer
69
+     */
70
+
71
+    /** client/html/catalog/detail/basket/attribute/name
72
+     * Name of the attribute part used by the catalog detail basket client implementation
73
+     *
74
+     * Use "Myname" if your class is named "\Aimeos\Client\Html\Catalog\Detail\Basket\Attribute\Myname".
75
+     * The name is case-sensitive and you should avoid camel case names like "MyName".
76
+     *
77
+     * @param string Last part of the client class name
78
+     * @since 2014.03
79
+     * @category Developer
80
+     */
81
+    private $subPartNames = array( 'service', 'selection', 'attribute' );
82
+    private $cache;
83
+
84
+
85
+    /**
86
+     * Returns the HTML code for insertion into the body.
87
+     *
88
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
89
+     * @param array &$tags Result array for the list of tags that are associated to the output
90
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
91
+     * @return string HTML code
92
+     */
93
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
94
+    {
95
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
96
+
97
+        $html = '';
98
+        foreach( $this->getSubClients() as $subclient ) {
99
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
100
+        }
101
+        $view->basketBody = $html;
102
+
103
+        /** client/html/catalog/detail/basket/standard/template-body
104
+         * Relative path to the HTML body template of the catalog detail basket client.
105
+         *
106
+         * The template file contains the HTML code and processing instructions
107
+         * to generate the result shown in the body of the frontend. The
108
+         * configuration string is the path to the template file relative
109
+         * to the templates directory (usually in client/html/templates).
110
+         *
111
+         * You can overwrite the template file configuration in extensions and
112
+         * provide alternative templates. These alternative templates should be
113
+         * named like the default one but with the string "standard" replaced by
114
+         * an unique name. You may use the name of your project for this. If
115
+         * you've implemented an alternative client class as well, "standard"
116
+         * should be replaced by the name of the new class.
117
+         *
118
+         * @param string Relative path to the template creating code for the HTML page body
119
+         * @since 2014.03
120
+         * @category Developer
121
+         * @see client/html/catalog/detail/basket/standard/template-header
122
+         */
123
+        $tplconf = 'client/html/catalog/detail/basket/standard/template-body';
124
+        $default = 'catalog/detail/basket-body-default.php';
125
+
126
+        return $view->render( $view->config( $tplconf, $default ) );
127
+    }
128
+
129
+
130
+    /**
131
+     * Returns the HTML string for insertion into the header.
132
+     *
133
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
134
+     * @param array &$tags Result array for the list of tags that are associated to the output
135
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
136
+     * @return string|null String including HTML tags for the header on error
137
+     */
138
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
139
+    {
140
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
141
+
142
+        $html = '';
143
+        foreach( $this->getSubClients() as $subclient ) {
144
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
145
+        }
146
+        $view->basketHeader = $html;
147
+
148
+        /** client/html/catalog/detail/basket/standard/template-header
149
+         * Relative path to the HTML header template of the catalog detail basket client.
150
+         *
151
+         * The template file contains the HTML code and processing instructions
152
+         * to generate the HTML code that is inserted into the HTML page header
153
+         * of the rendered page in the frontend. The configuration string is the
154
+         * path to the template file relative to the templates directory (usually
155
+         * in client/html/templates).
156
+         *
157
+         * You can overwrite the template file configuration in extensions and
158
+         * provide alternative templates. These alternative templates should be
159
+         * named like the default one but with the string "standard" replaced by
160
+         * an unique name. You may use the name of your project for this. If
161
+         * you've implemented an alternative client class as well, "standard"
162
+         * should be replaced by the name of the new class.
163
+         *
164
+         * @param string Relative path to the template creating code for the HTML page head
165
+         * @since 2014.03
166
+         * @category Developer
167
+         * @see client/html/catalog/detail/basket/standard/template-body
168
+         */
169
+        $tplconf = 'client/html/catalog/detail/basket/standard/template-header';
170
+        $default = 'catalog/detail/basket-header-default.php';
171
+
172
+        return $view->render( $view->config( $tplconf, $default ) );
173
+    }
174
+
175
+
176
+    /**
177
+     * Returns the sub-client given by its name.
178
+     *
179
+     * @param string $type Name of the client type
180
+     * @param string|null $name Name of the sub-client (Default if null)
181
+     * @return \Aimeos\Client\Html\Iface Sub-client object
182
+     */
183
+    public function getSubClient( $type, $name = null )
184
+    {
185
+        /** client/html/catalog/detail/basket/decorators/excludes
186
+         * Excludes decorators added by the "common" option from the catalog detail basket html client
187
+         *
188
+         * Decorators extend the functionality of a class by adding new aspects
189
+         * (e.g. log what is currently done), executing the methods of the underlying
190
+         * class only in certain conditions (e.g. only for logged in users) or
191
+         * modify what is returned to the caller.
192
+         *
193
+         * This option allows you to remove a decorator added via
194
+         * "client/html/common/decorators/default" before they are wrapped
195
+         * around the html client.
196
+         *
197
+         *  client/html/catalog/detail/basket/decorators/excludes = array( 'decorator1' )
198
+         *
199
+         * This would remove the decorator named "decorator1" from the list of
200
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
201
+         * "client/html/common/decorators/default" to the html client.
202
+         *
203
+         * @param array List of decorator names
204
+         * @since 2015.08
205
+         * @category Developer
206
+         * @see client/html/common/decorators/default
207
+         * @see client/html/catalog/detail/basket/decorators/global
208
+         * @see client/html/catalog/detail/basket/decorators/local
209
+         */
210
+
211
+        /** client/html/catalog/detail/basket/decorators/global
212
+         * Adds a list of globally available decorators only to the catalog detail basket html client
213
+         *
214
+         * Decorators extend the functionality of a class by adding new aspects
215
+         * (e.g. log what is currently done), executing the methods of the underlying
216
+         * class only in certain conditions (e.g. only for logged in users) or
217
+         * modify what is returned to the caller.
218
+         *
219
+         * This option allows you to wrap global decorators
220
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
221
+         *
222
+         *  client/html/catalog/detail/basket/decorators/global = array( 'decorator1' )
223
+         *
224
+         * This would add the decorator named "decorator1" defined by
225
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
226
+         *
227
+         * @param array List of decorator names
228
+         * @since 2015.08
229
+         * @category Developer
230
+         * @see client/html/common/decorators/default
231
+         * @see client/html/catalog/detail/basket/decorators/excludes
232
+         * @see client/html/catalog/detail/basket/decorators/local
233
+         */
234
+
235
+        /** client/html/catalog/detail/basket/decorators/local
236
+         * Adds a list of local decorators only to the catalog detail basket html client
237
+         *
238
+         * Decorators extend the functionality of a class by adding new aspects
239
+         * (e.g. log what is currently done), executing the methods of the underlying
240
+         * class only in certain conditions (e.g. only for logged in users) or
241
+         * modify what is returned to the caller.
242
+         *
243
+         * This option allows you to wrap local decorators
244
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
245
+         *
246
+         *  client/html/catalog/detail/basket/decorators/local = array( 'decorator2' )
247
+         *
248
+         * This would add the decorator named "decorator2" defined by
249
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
250
+         *
251
+         * @param array List of decorator names
252
+         * @since 2015.08
253
+         * @category Developer
254
+         * @see client/html/common/decorators/default
255
+         * @see client/html/catalog/detail/basket/decorators/excludes
256
+         * @see client/html/catalog/detail/basket/decorators/global
257
+         */
258
+
259
+        return $this->createSubClient( 'catalog/detail/basket/' . $type, $name );
260
+    }
261
+
262
+
263
+    /**
264
+     * Modifies the cached body content to replace content based on sessions or cookies.
265
+     *
266
+     * @param string $content Cached content
267
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
268
+     * @return string Modified body content
269
+     */
270
+    public function modifyBody( $content, $uid )
271
+    {
272
+        $content = parent::modifyBody( $content, $uid );
273
+
274
+        return $this->replaceSection( $content, $this->getView()->csrf()->formfield(), 'catalog.detail.basket.csrf' );
275
+    }
276
+
277
+
278
+    /**
279
+     * Returns the list of sub-client names configured for the client.
280
+     *
281
+     * @return array List of HTML client names
282
+     */
283
+    protected function getSubClientNames()
284
+    {
285
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
286
+    }
287
+
288
+
289
+    /**
290
+     * Sets the necessary parameter values in the view.
291
+     *
292
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
293
+     * @param array &$tags Result array for the list of tags that are associated to the output
294
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
295
+     * @return \Aimeos\MW\View\Iface Modified view object
296
+     */
297
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
298
+    {
299
+        if( !isset( $this->cache ) )
300
+        {
301
+            $config = $this->getContext()->getConfig();
302
+
303
+            /** client/html/catalog/detail/stock/enable
304
+             * Enables or disables displaying product stock levels in product detail view
305
+             *
306
+             * This configuration option allows shop owners to display product
307
+             * stock levels for each product in the detail views or to disable
308
+             * fetching product stock information.
309
+             *
310
+             * The stock information is fetched via AJAX and inserted via Javascript.
311
+             * This allows to cache product items by leaving out such highly
312
+             * dynamic content like stock levels which changes with each order.
313
+             *
314
+             * @param boolean Value of "1" to display stock levels, "0" to disable displaying them
315
+             * @since 2014.03
316
+             * @category User
317
+             * @category Developer
318
+             * @see client/html/catalog/lists/stock/enable
319
+             * @see client/html/catalog/stock/url/target
320
+             * @see client/html/catalog/stock/url/controller
321
+             * @see client/html/catalog/stock/url/action
322
+             * @see client/html/catalog/stock/url/config
323
+             */
324
+            if( isset( $view->detailProductItem ) && $config->get( 'client/html/catalog/detail/stock/enable', true ) === true )
325
+            {
326
+                $stockTarget = $config->get( 'client/html/catalog/stock/url/target' );
327
+                $stockController = $config->get( 'client/html/catalog/stock/url/controller', 'catalog' );
328
+                $stockAction = $config->get( 'client/html/catalog/stock/url/action', 'stock' );
329
+                $stockConfig = $config->get( 'client/html/catalog/stock/url/config', array() );
330
+
331
+                $prodIds = array_keys( $view->detailProductItem->getRefItems( 'product', null, 'default' ) );
332
+                array_unshift( $prodIds, $view->detailProductItem->getId() );
333
+                $params = array( 's_prodid' => $prodIds );
334
+
335
+                $view->basketStockUrl = $view->url( $stockTarget, $stockController, $stockAction, $params, array(), $stockConfig );
336
+                $view->basketProductIds = $prodIds;
337
+            }
338
+
339
+            $this->cache = $view;
340
+        }
341
+
342
+        return $this->cache;
343
+    }
344 344
 }
345 345
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Basket/Selection/Standard.php 1 patch
Indentation   +340 added lines, -340 removed lines patch added patch discarded remove patch
@@ -19,345 +19,345 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/basket/selection/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail basket selection section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/basket/selection/standard/subparts';
59
-	private $subPartNames = array();
60
-	private $tags = array();
61
-	private $expire;
62
-	private $cache;
63
-
64
-
65
-	/**
66
-	 * Returns the HTML code for insertion into the body.
67
-	 *
68
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
-	 * @param array &$tags Result array for the list of tags that are associated to the output
70
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
-	 * @return string HTML code
72
-	 */
73
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
-	{
75
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
76
-
77
-		$html = '';
78
-		foreach( $this->getSubClients() as $subclient ) {
79
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
-		}
81
-		$view->selectionBody = $html;
82
-
83
-		/** client/html/catalog/detail/basket/selection/standard/template-body
84
-		 * Relative path to the HTML body template of the catalog detail basket selection client.
85
-		 *
86
-		 * The template file contains the HTML code and processing instructions
87
-		 * to generate the result shown in the body of the frontend. The
88
-		 * configuration string is the path to the template file relative
89
-		 * to the templates directory (usually in client/html/templates).
90
-		 *
91
-		 * You can overwrite the template file configuration in extensions and
92
-		 * provide alternative templates. These alternative templates should be
93
-		 * named like the default one but with the string "standard" replaced by
94
-		 * an unique name. You may use the name of your project for this. If
95
-		 * you've implemented an alternative client class as well, "standard"
96
-		 * should be replaced by the name of the new class.
97
-		 *
98
-		 * @param string Relative path to the template creating code for the HTML page body
99
-		 * @since 2014.03
100
-		 * @category Developer
101
-		 * @see client/html/catalog/detail/basket/selection/standard/template-header
102
-		 */
103
-		$tplconf = 'client/html/catalog/detail/basket/selection/standard/template-body';
104
-		$default = 'catalog/detail/basket-selection-body-default.php';
105
-
106
-		return $view->render( $view->config( $tplconf, $default ) );
107
-	}
108
-
109
-
110
-	/**
111
-	 * Returns the HTML string for insertion into the header.
112
-	 *
113
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
-	 * @param array &$tags Result array for the list of tags that are associated to the output
115
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
-	 * @return string|null String including HTML tags for the header on error
117
-	 */
118
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
-	{
120
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
121
-
122
-		$html = '';
123
-		foreach( $this->getSubClients() as $subclient ) {
124
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
-		}
126
-		$view->selectionHeader = $html;
127
-
128
-		/** client/html/catalog/detail/basket/selection/standard/template-header
129
-		 * Relative path to the HTML header template of the catalog detail basket selection client.
130
-		 *
131
-		 * The template file contains the HTML code and processing instructions
132
-		 * to generate the HTML code that is inserted into the HTML page header
133
-		 * of the rendered page in the frontend. The configuration string is the
134
-		 * path to the template file relative to the templates directory (usually
135
-		 * in client/html/templates).
136
-		 *
137
-		 * You can overwrite the template file configuration in extensions and
138
-		 * provide alternative templates. These alternative templates should be
139
-		 * named like the default one but with the string "standard" replaced by
140
-		 * an unique name. You may use the name of your project for this. If
141
-		 * you've implemented an alternative client class as well, "standard"
142
-		 * should be replaced by the name of the new class.
143
-		 *
144
-		 * @param string Relative path to the template creating code for the HTML page head
145
-		 * @since 2014.03
146
-		 * @category Developer
147
-		 * @see client/html/catalog/detail/basket/selection/standard/template-body
148
-		 */
149
-		$tplconf = 'client/html/catalog/detail/basket/selection/standard/template-header';
150
-		$default = 'catalog/detail/basket-selection-header-default.php';
151
-
152
-		return $view->render( $view->config( $tplconf, $default ) );
153
-	}
154
-
155
-
156
-	/**
157
-	 * Returns the sub-client given by its name.
158
-	 *
159
-	 * @param string $type Name of the client type
160
-	 * @param string|null $name Name of the sub-client (Default if null)
161
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
162
-	 */
163
-	public function getSubClient( $type, $name = null )
164
-	{
165
-		/** client/html/catalog/detail/basket/selection/decorators/excludes
166
-		 * Excludes decorators added by the "common" option from the catalog detail basket selection html client
167
-		 *
168
-		 * Decorators extend the functionality of a class by adding new aspects
169
-		 * (e.g. log what is currently done), executing the methods of the underlying
170
-		 * class only in certain conditions (e.g. only for logged in users) or
171
-		 * modify what is returned to the caller.
172
-		 *
173
-		 * This option allows you to remove a decorator added via
174
-		 * "client/html/common/decorators/default" before they are wrapped
175
-		 * around the html client.
176
-		 *
177
-		 *  client/html/catalog/detail/basket/selection/decorators/excludes = array( 'decorator1' )
178
-		 *
179
-		 * This would remove the decorator named "decorator1" from the list of
180
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
-		 * "client/html/common/decorators/default" to the html client.
182
-		 *
183
-		 * @param array List of decorator names
184
-		 * @since 2015.08
185
-		 * @category Developer
186
-		 * @see client/html/common/decorators/default
187
-		 * @see client/html/catalog/detail/basket/selection/decorators/global
188
-		 * @see client/html/catalog/detail/basket/selection/decorators/local
189
-		 */
190
-
191
-		/** client/html/catalog/detail/basket/selection/decorators/global
192
-		 * Adds a list of globally available decorators only to the catalog detail basket selection html client
193
-		 *
194
-		 * Decorators extend the functionality of a class by adding new aspects
195
-		 * (e.g. log what is currently done), executing the methods of the underlying
196
-		 * class only in certain conditions (e.g. only for logged in users) or
197
-		 * modify what is returned to the caller.
198
-		 *
199
-		 * This option allows you to wrap global decorators
200
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
-		 *
202
-		 *  client/html/catalog/detail/basket/selection/decorators/global = array( 'decorator1' )
203
-		 *
204
-		 * This would add the decorator named "decorator1" defined by
205
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
-		 *
207
-		 * @param array List of decorator names
208
-		 * @since 2015.08
209
-		 * @category Developer
210
-		 * @see client/html/common/decorators/default
211
-		 * @see client/html/catalog/detail/basket/selection/decorators/excludes
212
-		 * @see client/html/catalog/detail/basket/selection/decorators/local
213
-		 */
214
-
215
-		/** client/html/catalog/detail/basket/selection/decorators/local
216
-		 * Adds a list of local decorators only to the catalog detail basket selection html client
217
-		 *
218
-		 * Decorators extend the functionality of a class by adding new aspects
219
-		 * (e.g. log what is currently done), executing the methods of the underlying
220
-		 * class only in certain conditions (e.g. only for logged in users) or
221
-		 * modify what is returned to the caller.
222
-		 *
223
-		 * This option allows you to wrap local decorators
224
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
-		 *
226
-		 *  client/html/catalog/detail/basket/selection/decorators/local = array( 'decorator2' )
227
-		 *
228
-		 * This would add the decorator named "decorator2" defined by
229
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
-		 *
231
-		 * @param array List of decorator names
232
-		 * @since 2015.08
233
-		 * @category Developer
234
-		 * @see client/html/common/decorators/default
235
-		 * @see client/html/catalog/detail/basket/selection/decorators/excludes
236
-		 * @see client/html/catalog/detail/basket/selection/decorators/global
237
-		 */
238
-
239
-		return $this->createSubClient( 'catalog/detail/basket/selection/' . $type, $name );
240
-	}
241
-
242
-
243
-	/**
244
-	 * Returns the list of sub-client names configured for the client.
245
-	 *
246
-	 * @return array List of HTML client names
247
-	 */
248
-	protected function getSubClientNames()
249
-	{
250
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
-	}
252
-
253
-
254
-	/**
255
-	 * Sets the necessary parameter values in the view.
256
-	 *
257
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
-	 * @param array &$tags Result array for the list of tags that are associated to the output
259
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
-	 * @return \Aimeos\MW\View\Iface Modified view object
261
-	 */
262
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
-	{
264
-		if( !isset( $this->cache ) )
265
-		{
266
-			if( $view->detailProductItem->getType() === 'select' )
267
-			{
268
-				$context = $this->getContext();
269
-				$config = $context->getConfig();
270
-				$domains = array( 'text', 'price', 'media', 'attribute' );
271
-				$products = $view->detailProductItem->getRefItems( 'product', 'default', 'default' );
272
-
273
-				/** client/html/catalog/detail/basket/selection/domains
274
-				 * A list of domain names whose items should be available in the basket
275
-				 * selection part of the catalog detail view templates
276
-				 *
277
-				 * The templates rendering basket selection related data usually add
278
-				 * the images and texts associated to each item. If you want to
279
-				 * display additional content like the attributes, you can configure
280
-				 * your own list of domains (attribute, media, price, product, text,
281
-				 * etc. are domains) whose items are fetched from the storage.
282
-				 * Please keep in mind that the more domains you add to the
283
-				 * configuration, the more time is required for fetching the content!
284
-				 *
285
-				 * @param array List of domain names
286
-				 * @since 2015.09
287
-				 * @category Developer
288
-				 * @see client/html/catalog/detail/basket/selection/domains-attributes
289
-				*/
290
-				$domains = $config->get( 'client/html/catalog/detail/basket/selection/domains', $domains );
291
-
292
-				$controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
293
-				$subproducts = $controller->getProductItems( array_keys( $products ), $domains );
294
-				$attrIds = $prodDeps = $attrDeps = $attrTypeDeps = array();
295
-
296
-				foreach( $subproducts as $subProdId => $subProduct )
297
-				{
298
-					foreach( $subProduct->getRefItems( 'attribute', null, 'variant' ) as $attrId => $attrItem )
299
-					{
300
-						$attrTypeDeps[$attrItem->getType()][$attrId] = $attrItem->getPosition();
301
-						$attrDeps[$attrId][] = $subProdId;
302
-						$prodDeps[$subProdId][] = $attrId;
303
-						$attrIds[] = $attrId;
304
-					}
305
-				}
306
-
307
-				ksort( $attrTypeDeps );
308
-
309
-				$this->addMetaItem( $subproducts, 'product', $this->expire, $this->tags );
310
-				$this->addMetaList( array_keys( $subproducts ), 'product', $this->expire );
311
-
312
-
313
-				$attrManager = $controller->createManager( 'attribute' );
314
-
315
-				$search = $attrManager->createSearch( true );
316
-				$expr = array(
317
-					$search->compare( '==', 'attribute.id', $attrIds ),
318
-					$search->getConditions(),
319
-				);
320
-				$search->setConditions( $search->combine( '&&', $expr ) );
321
-
322
-				/** client/html/catalog/detail/basket/selection/domains-attributes
323
-				 * A list of domain names whose items should be available for the attributes
324
-				 * in the basket selection part of the catalog detail view templates
325
-				 *
326
-				 * The templates rendering basket selection related data usually add
327
-				 * the images and texts associated to each item. If you want to
328
-				 * display additional content like the attributes, you can configure
329
-				 * your own list of domains (attribute, media, price, product, text,
330
-				 * etc. are domains) whose items are fetched from the storage.
331
-				 * Please keep in mind that the more domains you add to the
332
-				 * configuration, the more time is required for fetching the content!
333
-				 *
334
-				 * @param array List of domain names
335
-				 * @since 2015.09
336
-				 * @category Developer
337
-				 * @see client/html/catalog/detail/basket/selection/domains
338
-				 */
339
-				$domains = array( 'text', 'media' );
340
-				$domains = $config->get( 'client/html/catalog/detail/basket/selection/domains-attributes', $domains );
341
-
342
-				$attributes = $attrManager->searchItems( $search, $domains );
343
-
344
-				$this->addMetaItem( $attributes, 'attribute', $this->expire, $this->tags );
345
-				$this->addMetaList( array_keys( $attributes ), 'attribute', $this->expire );
346
-
347
-
348
-				$view->selectionProducts = $subproducts;
349
-				$view->selectionProductDependencies = $prodDeps;
350
-				$view->selectionAttributeDependencies = $attrDeps;
351
-				$view->selectionAttributeTypeDependencies = $attrTypeDeps;
352
-				$view->selectionAttributeItems = $attributes;
353
-			}
354
-
355
-			$this->cache = $view;
356
-		}
357
-
358
-		$expire = $this->expires( $this->expire, $expire );
359
-		$tags = array_merge( $tags, $this->tags );
360
-
361
-		return $this->cache;
362
-	}
25
+    /** client/html/catalog/detail/basket/selection/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail basket selection section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/basket/selection/standard/subparts';
59
+    private $subPartNames = array();
60
+    private $tags = array();
61
+    private $expire;
62
+    private $cache;
63
+
64
+
65
+    /**
66
+     * Returns the HTML code for insertion into the body.
67
+     *
68
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
+     * @param array &$tags Result array for the list of tags that are associated to the output
70
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
+     * @return string HTML code
72
+     */
73
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
+    {
75
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
76
+
77
+        $html = '';
78
+        foreach( $this->getSubClients() as $subclient ) {
79
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
+        }
81
+        $view->selectionBody = $html;
82
+
83
+        /** client/html/catalog/detail/basket/selection/standard/template-body
84
+         * Relative path to the HTML body template of the catalog detail basket selection client.
85
+         *
86
+         * The template file contains the HTML code and processing instructions
87
+         * to generate the result shown in the body of the frontend. The
88
+         * configuration string is the path to the template file relative
89
+         * to the templates directory (usually in client/html/templates).
90
+         *
91
+         * You can overwrite the template file configuration in extensions and
92
+         * provide alternative templates. These alternative templates should be
93
+         * named like the default one but with the string "standard" replaced by
94
+         * an unique name. You may use the name of your project for this. If
95
+         * you've implemented an alternative client class as well, "standard"
96
+         * should be replaced by the name of the new class.
97
+         *
98
+         * @param string Relative path to the template creating code for the HTML page body
99
+         * @since 2014.03
100
+         * @category Developer
101
+         * @see client/html/catalog/detail/basket/selection/standard/template-header
102
+         */
103
+        $tplconf = 'client/html/catalog/detail/basket/selection/standard/template-body';
104
+        $default = 'catalog/detail/basket-selection-body-default.php';
105
+
106
+        return $view->render( $view->config( $tplconf, $default ) );
107
+    }
108
+
109
+
110
+    /**
111
+     * Returns the HTML string for insertion into the header.
112
+     *
113
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
+     * @param array &$tags Result array for the list of tags that are associated to the output
115
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
+     * @return string|null String including HTML tags for the header on error
117
+     */
118
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
+    {
120
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
121
+
122
+        $html = '';
123
+        foreach( $this->getSubClients() as $subclient ) {
124
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
+        }
126
+        $view->selectionHeader = $html;
127
+
128
+        /** client/html/catalog/detail/basket/selection/standard/template-header
129
+         * Relative path to the HTML header template of the catalog detail basket selection client.
130
+         *
131
+         * The template file contains the HTML code and processing instructions
132
+         * to generate the HTML code that is inserted into the HTML page header
133
+         * of the rendered page in the frontend. The configuration string is the
134
+         * path to the template file relative to the templates directory (usually
135
+         * in client/html/templates).
136
+         *
137
+         * You can overwrite the template file configuration in extensions and
138
+         * provide alternative templates. These alternative templates should be
139
+         * named like the default one but with the string "standard" replaced by
140
+         * an unique name. You may use the name of your project for this. If
141
+         * you've implemented an alternative client class as well, "standard"
142
+         * should be replaced by the name of the new class.
143
+         *
144
+         * @param string Relative path to the template creating code for the HTML page head
145
+         * @since 2014.03
146
+         * @category Developer
147
+         * @see client/html/catalog/detail/basket/selection/standard/template-body
148
+         */
149
+        $tplconf = 'client/html/catalog/detail/basket/selection/standard/template-header';
150
+        $default = 'catalog/detail/basket-selection-header-default.php';
151
+
152
+        return $view->render( $view->config( $tplconf, $default ) );
153
+    }
154
+
155
+
156
+    /**
157
+     * Returns the sub-client given by its name.
158
+     *
159
+     * @param string $type Name of the client type
160
+     * @param string|null $name Name of the sub-client (Default if null)
161
+     * @return \Aimeos\Client\Html\Iface Sub-client object
162
+     */
163
+    public function getSubClient( $type, $name = null )
164
+    {
165
+        /** client/html/catalog/detail/basket/selection/decorators/excludes
166
+         * Excludes decorators added by the "common" option from the catalog detail basket selection html client
167
+         *
168
+         * Decorators extend the functionality of a class by adding new aspects
169
+         * (e.g. log what is currently done), executing the methods of the underlying
170
+         * class only in certain conditions (e.g. only for logged in users) or
171
+         * modify what is returned to the caller.
172
+         *
173
+         * This option allows you to remove a decorator added via
174
+         * "client/html/common/decorators/default" before they are wrapped
175
+         * around the html client.
176
+         *
177
+         *  client/html/catalog/detail/basket/selection/decorators/excludes = array( 'decorator1' )
178
+         *
179
+         * This would remove the decorator named "decorator1" from the list of
180
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
+         * "client/html/common/decorators/default" to the html client.
182
+         *
183
+         * @param array List of decorator names
184
+         * @since 2015.08
185
+         * @category Developer
186
+         * @see client/html/common/decorators/default
187
+         * @see client/html/catalog/detail/basket/selection/decorators/global
188
+         * @see client/html/catalog/detail/basket/selection/decorators/local
189
+         */
190
+
191
+        /** client/html/catalog/detail/basket/selection/decorators/global
192
+         * Adds a list of globally available decorators only to the catalog detail basket selection html client
193
+         *
194
+         * Decorators extend the functionality of a class by adding new aspects
195
+         * (e.g. log what is currently done), executing the methods of the underlying
196
+         * class only in certain conditions (e.g. only for logged in users) or
197
+         * modify what is returned to the caller.
198
+         *
199
+         * This option allows you to wrap global decorators
200
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
+         *
202
+         *  client/html/catalog/detail/basket/selection/decorators/global = array( 'decorator1' )
203
+         *
204
+         * This would add the decorator named "decorator1" defined by
205
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
+         *
207
+         * @param array List of decorator names
208
+         * @since 2015.08
209
+         * @category Developer
210
+         * @see client/html/common/decorators/default
211
+         * @see client/html/catalog/detail/basket/selection/decorators/excludes
212
+         * @see client/html/catalog/detail/basket/selection/decorators/local
213
+         */
214
+
215
+        /** client/html/catalog/detail/basket/selection/decorators/local
216
+         * Adds a list of local decorators only to the catalog detail basket selection html client
217
+         *
218
+         * Decorators extend the functionality of a class by adding new aspects
219
+         * (e.g. log what is currently done), executing the methods of the underlying
220
+         * class only in certain conditions (e.g. only for logged in users) or
221
+         * modify what is returned to the caller.
222
+         *
223
+         * This option allows you to wrap local decorators
224
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
+         *
226
+         *  client/html/catalog/detail/basket/selection/decorators/local = array( 'decorator2' )
227
+         *
228
+         * This would add the decorator named "decorator2" defined by
229
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
+         *
231
+         * @param array List of decorator names
232
+         * @since 2015.08
233
+         * @category Developer
234
+         * @see client/html/common/decorators/default
235
+         * @see client/html/catalog/detail/basket/selection/decorators/excludes
236
+         * @see client/html/catalog/detail/basket/selection/decorators/global
237
+         */
238
+
239
+        return $this->createSubClient( 'catalog/detail/basket/selection/' . $type, $name );
240
+    }
241
+
242
+
243
+    /**
244
+     * Returns the list of sub-client names configured for the client.
245
+     *
246
+     * @return array List of HTML client names
247
+     */
248
+    protected function getSubClientNames()
249
+    {
250
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
+    }
252
+
253
+
254
+    /**
255
+     * Sets the necessary parameter values in the view.
256
+     *
257
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
+     * @param array &$tags Result array for the list of tags that are associated to the output
259
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
+     * @return \Aimeos\MW\View\Iface Modified view object
261
+     */
262
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
+    {
264
+        if( !isset( $this->cache ) )
265
+        {
266
+            if( $view->detailProductItem->getType() === 'select' )
267
+            {
268
+                $context = $this->getContext();
269
+                $config = $context->getConfig();
270
+                $domains = array( 'text', 'price', 'media', 'attribute' );
271
+                $products = $view->detailProductItem->getRefItems( 'product', 'default', 'default' );
272
+
273
+                /** client/html/catalog/detail/basket/selection/domains
274
+                 * A list of domain names whose items should be available in the basket
275
+                 * selection part of the catalog detail view templates
276
+                 *
277
+                 * The templates rendering basket selection related data usually add
278
+                 * the images and texts associated to each item. If you want to
279
+                 * display additional content like the attributes, you can configure
280
+                 * your own list of domains (attribute, media, price, product, text,
281
+                 * etc. are domains) whose items are fetched from the storage.
282
+                 * Please keep in mind that the more domains you add to the
283
+                 * configuration, the more time is required for fetching the content!
284
+                 *
285
+                 * @param array List of domain names
286
+                 * @since 2015.09
287
+                 * @category Developer
288
+                 * @see client/html/catalog/detail/basket/selection/domains-attributes
289
+                 */
290
+                $domains = $config->get( 'client/html/catalog/detail/basket/selection/domains', $domains );
291
+
292
+                $controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
293
+                $subproducts = $controller->getProductItems( array_keys( $products ), $domains );
294
+                $attrIds = $prodDeps = $attrDeps = $attrTypeDeps = array();
295
+
296
+                foreach( $subproducts as $subProdId => $subProduct )
297
+                {
298
+                    foreach( $subProduct->getRefItems( 'attribute', null, 'variant' ) as $attrId => $attrItem )
299
+                    {
300
+                        $attrTypeDeps[$attrItem->getType()][$attrId] = $attrItem->getPosition();
301
+                        $attrDeps[$attrId][] = $subProdId;
302
+                        $prodDeps[$subProdId][] = $attrId;
303
+                        $attrIds[] = $attrId;
304
+                    }
305
+                }
306
+
307
+                ksort( $attrTypeDeps );
308
+
309
+                $this->addMetaItem( $subproducts, 'product', $this->expire, $this->tags );
310
+                $this->addMetaList( array_keys( $subproducts ), 'product', $this->expire );
311
+
312
+
313
+                $attrManager = $controller->createManager( 'attribute' );
314
+
315
+                $search = $attrManager->createSearch( true );
316
+                $expr = array(
317
+                    $search->compare( '==', 'attribute.id', $attrIds ),
318
+                    $search->getConditions(),
319
+                );
320
+                $search->setConditions( $search->combine( '&&', $expr ) );
321
+
322
+                /** client/html/catalog/detail/basket/selection/domains-attributes
323
+                 * A list of domain names whose items should be available for the attributes
324
+                 * in the basket selection part of the catalog detail view templates
325
+                 *
326
+                 * The templates rendering basket selection related data usually add
327
+                 * the images and texts associated to each item. If you want to
328
+                 * display additional content like the attributes, you can configure
329
+                 * your own list of domains (attribute, media, price, product, text,
330
+                 * etc. are domains) whose items are fetched from the storage.
331
+                 * Please keep in mind that the more domains you add to the
332
+                 * configuration, the more time is required for fetching the content!
333
+                 *
334
+                 * @param array List of domain names
335
+                 * @since 2015.09
336
+                 * @category Developer
337
+                 * @see client/html/catalog/detail/basket/selection/domains
338
+                 */
339
+                $domains = array( 'text', 'media' );
340
+                $domains = $config->get( 'client/html/catalog/detail/basket/selection/domains-attributes', $domains );
341
+
342
+                $attributes = $attrManager->searchItems( $search, $domains );
343
+
344
+                $this->addMetaItem( $attributes, 'attribute', $this->expire, $this->tags );
345
+                $this->addMetaList( array_keys( $attributes ), 'attribute', $this->expire );
346
+
347
+
348
+                $view->selectionProducts = $subproducts;
349
+                $view->selectionProductDependencies = $prodDeps;
350
+                $view->selectionAttributeDependencies = $attrDeps;
351
+                $view->selectionAttributeTypeDependencies = $attrTypeDeps;
352
+                $view->selectionAttributeItems = $attributes;
353
+            }
354
+
355
+            $this->cache = $view;
356
+        }
357
+
358
+        $expire = $this->expires( $this->expire, $expire );
359
+        $tags = array_merge( $tags, $this->tags );
360
+
361
+        return $this->cache;
362
+    }
363 363
 }
364 364
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Image/Standard.php 1 patch
Indentation   +226 added lines, -226 removed lines patch added patch discarded remove patch
@@ -19,231 +19,231 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/image/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail image section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/image/standard/subparts';
59
-	private $subPartNames = array();
60
-
61
-
62
-	/**
63
-	 * Returns the HTML code for insertion into the body.
64
-	 *
65
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
66
-	 * @param array &$tags Result array for the list of tags that are associated to the output
67
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
68
-	 * @return string HTML code
69
-	 */
70
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
71
-	{
72
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
73
-
74
-		$html = '';
75
-		foreach( $this->getSubClients() as $subclient ) {
76
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
77
-		}
78
-		$view->imageBody = $html;
79
-
80
-		/** client/html/catalog/detail/image/standard/template-body
81
-		 * Relative path to the HTML body template of the catalog detail image client.
82
-		 *
83
-		 * The template file contains the HTML code and processing instructions
84
-		 * to generate the result shown in the body of the frontend. The
85
-		 * configuration string is the path to the template file relative
86
-		 * to the templates directory (usually in client/html/templates).
87
-		 *
88
-		 * You can overwrite the template file configuration in extensions and
89
-		 * provide alternative templates. These alternative templates should be
90
-		 * named like the default one but with the string "standard" replaced by
91
-		 * an unique name. You may use the name of your project for this. If
92
-		 * you've implemented an alternative client class as well, "standard"
93
-		 * should be replaced by the name of the new class.
94
-		 *
95
-		 * @param string Relative path to the template creating code for the HTML page body
96
-		 * @since 2014.03
97
-		 * @category Developer
98
-		 * @see client/html/catalog/detail/image/standard/template-header
99
-		 */
100
-		$tplconf = 'client/html/catalog/detail/image/standard/template-body';
101
-		$default = 'catalog/detail/image-body-bottom.php';
102
-
103
-		return $view->render( $view->config( $tplconf, $default ) );
104
-	}
105
-
106
-
107
-	/**
108
-	 * Returns the HTML string for insertion into the header.
109
-	 *
110
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
111
-	 * @param array &$tags Result array for the list of tags that are associated to the output
112
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
113
-	 * @return string|null String including HTML tags for the header on error
114
-	 */
115
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
116
-	{
117
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
118
-
119
-		$html = '';
120
-		foreach( $this->getSubClients() as $subclient ) {
121
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
122
-		}
123
-		$view->imageHeader = $html;
124
-
125
-		/** client/html/catalog/detail/image/standard/template-header
126
-		 * Relative path to the HTML header template of the catalog detail image client.
127
-		 *
128
-		 * The template file contains the HTML code and processing instructions
129
-		 * to generate the HTML code that is inserted into the HTML page header
130
-		 * of the rendered page in the frontend. The configuration string is the
131
-		 * path to the template file relative to the templates directory (usually
132
-		 * in client/html/templates).
133
-		 *
134
-		 * You can overwrite the template file configuration in extensions and
135
-		 * provide alternative templates. These alternative templates should be
136
-		 * named like the default one but with the string "standard" replaced by
137
-		 * an unique name. You may use the name of your project for this. If
138
-		 * you've implemented an alternative client class as well, "standard"
139
-		 * should be replaced by the name of the new class.
140
-		 *
141
-		 * @param string Relative path to the template creating code for the HTML page head
142
-		 * @since 2014.03
143
-		 * @category Developer
144
-		 * @see client/html/catalog/detail/image/standard/template-body
145
-		 */
146
-		$tplconf = 'client/html/catalog/detail/image/standard/template-header';
147
-		$default = 'catalog/detail/image-header-default.php';
148
-
149
-		return $view->render( $view->config( $tplconf, $default ) );
150
-	}
151
-
152
-
153
-	/**
154
-	 * Returns the sub-client given by its name.
155
-	 *
156
-	 * @param string $type Name of the client type
157
-	 * @param string|null $name Name of the sub-client (Default if null)
158
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
159
-	 */
160
-	public function getSubClient( $type, $name = null )
161
-	{
162
-		/** client/html/catalog/detail/image/decorators/excludes
163
-		 * Excludes decorators added by the "common" option from the catalog detail image html client
164
-		 *
165
-		 * Decorators extend the functionality of a class by adding new aspects
166
-		 * (e.g. log what is currently done), executing the methods of the underlying
167
-		 * class only in certain conditions (e.g. only for logged in users) or
168
-		 * modify what is returned to the caller.
169
-		 *
170
-		 * This option allows you to remove a decorator added via
171
-		 * "client/html/common/decorators/default" before they are wrapped
172
-		 * around the html client.
173
-		 *
174
-		 *  client/html/catalog/detail/image/decorators/excludes = array( 'decorator1' )
175
-		 *
176
-		 * This would remove the decorator named "decorator1" from the list of
177
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
178
-		 * "client/html/common/decorators/default" to the html client.
179
-		 *
180
-		 * @param array List of decorator names
181
-		 * @since 2015.08
182
-		 * @category Developer
183
-		 * @see client/html/common/decorators/default
184
-		 * @see client/html/catalog/detail/image/decorators/global
185
-		 * @see client/html/catalog/detail/image/decorators/local
186
-		 */
187
-
188
-		/** client/html/catalog/detail/image/decorators/global
189
-		 * Adds a list of globally available decorators only to the catalog detail image html client
190
-		 *
191
-		 * Decorators extend the functionality of a class by adding new aspects
192
-		 * (e.g. log what is currently done), executing the methods of the underlying
193
-		 * class only in certain conditions (e.g. only for logged in users) or
194
-		 * modify what is returned to the caller.
195
-		 *
196
-		 * This option allows you to wrap global decorators
197
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
198
-		 *
199
-		 *  client/html/catalog/detail/image/decorators/global = array( 'decorator1' )
200
-		 *
201
-		 * This would add the decorator named "decorator1" defined by
202
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
203
-		 *
204
-		 * @param array List of decorator names
205
-		 * @since 2015.08
206
-		 * @category Developer
207
-		 * @see client/html/common/decorators/default
208
-		 * @see client/html/catalog/detail/image/decorators/excludes
209
-		 * @see client/html/catalog/detail/image/decorators/local
210
-		 */
211
-
212
-		/** client/html/catalog/detail/image/decorators/local
213
-		 * Adds a list of local decorators only to the catalog detail image html client
214
-		 *
215
-		 * Decorators extend the functionality of a class by adding new aspects
216
-		 * (e.g. log what is currently done), executing the methods of the underlying
217
-		 * class only in certain conditions (e.g. only for logged in users) or
218
-		 * modify what is returned to the caller.
219
-		 *
220
-		 * This option allows you to wrap local decorators
221
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
222
-		 *
223
-		 *  client/html/catalog/detail/image/decorators/local = array( 'decorator2' )
224
-		 *
225
-		 * This would add the decorator named "decorator2" defined by
226
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
227
-		 *
228
-		 * @param array List of decorator names
229
-		 * @since 2015.08
230
-		 * @category Developer
231
-		 * @see client/html/common/decorators/default
232
-		 * @see client/html/catalog/detail/image/decorators/excludes
233
-		 * @see client/html/catalog/detail/image/decorators/global
234
-		 */
235
-
236
-		return $this->createSubClient( 'catalog/detail/image/' . $type, $name );
237
-	}
238
-
239
-
240
-	/**
241
-	 * Returns the list of sub-client names configured for the client.
242
-	 *
243
-	 * @return array List of HTML client names
244
-	 */
245
-	protected function getSubClientNames()
246
-	{
247
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
248
-	}
25
+    /** client/html/catalog/detail/image/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail image section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/image/standard/subparts';
59
+    private $subPartNames = array();
60
+
61
+
62
+    /**
63
+     * Returns the HTML code for insertion into the body.
64
+     *
65
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
66
+     * @param array &$tags Result array for the list of tags that are associated to the output
67
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
68
+     * @return string HTML code
69
+     */
70
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
71
+    {
72
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
73
+
74
+        $html = '';
75
+        foreach( $this->getSubClients() as $subclient ) {
76
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
77
+        }
78
+        $view->imageBody = $html;
79
+
80
+        /** client/html/catalog/detail/image/standard/template-body
81
+         * Relative path to the HTML body template of the catalog detail image client.
82
+         *
83
+         * The template file contains the HTML code and processing instructions
84
+         * to generate the result shown in the body of the frontend. The
85
+         * configuration string is the path to the template file relative
86
+         * to the templates directory (usually in client/html/templates).
87
+         *
88
+         * You can overwrite the template file configuration in extensions and
89
+         * provide alternative templates. These alternative templates should be
90
+         * named like the default one but with the string "standard" replaced by
91
+         * an unique name. You may use the name of your project for this. If
92
+         * you've implemented an alternative client class as well, "standard"
93
+         * should be replaced by the name of the new class.
94
+         *
95
+         * @param string Relative path to the template creating code for the HTML page body
96
+         * @since 2014.03
97
+         * @category Developer
98
+         * @see client/html/catalog/detail/image/standard/template-header
99
+         */
100
+        $tplconf = 'client/html/catalog/detail/image/standard/template-body';
101
+        $default = 'catalog/detail/image-body-bottom.php';
102
+
103
+        return $view->render( $view->config( $tplconf, $default ) );
104
+    }
105
+
106
+
107
+    /**
108
+     * Returns the HTML string for insertion into the header.
109
+     *
110
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
111
+     * @param array &$tags Result array for the list of tags that are associated to the output
112
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
113
+     * @return string|null String including HTML tags for the header on error
114
+     */
115
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
116
+    {
117
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
118
+
119
+        $html = '';
120
+        foreach( $this->getSubClients() as $subclient ) {
121
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
122
+        }
123
+        $view->imageHeader = $html;
124
+
125
+        /** client/html/catalog/detail/image/standard/template-header
126
+         * Relative path to the HTML header template of the catalog detail image client.
127
+         *
128
+         * The template file contains the HTML code and processing instructions
129
+         * to generate the HTML code that is inserted into the HTML page header
130
+         * of the rendered page in the frontend. The configuration string is the
131
+         * path to the template file relative to the templates directory (usually
132
+         * in client/html/templates).
133
+         *
134
+         * You can overwrite the template file configuration in extensions and
135
+         * provide alternative templates. These alternative templates should be
136
+         * named like the default one but with the string "standard" replaced by
137
+         * an unique name. You may use the name of your project for this. If
138
+         * you've implemented an alternative client class as well, "standard"
139
+         * should be replaced by the name of the new class.
140
+         *
141
+         * @param string Relative path to the template creating code for the HTML page head
142
+         * @since 2014.03
143
+         * @category Developer
144
+         * @see client/html/catalog/detail/image/standard/template-body
145
+         */
146
+        $tplconf = 'client/html/catalog/detail/image/standard/template-header';
147
+        $default = 'catalog/detail/image-header-default.php';
148
+
149
+        return $view->render( $view->config( $tplconf, $default ) );
150
+    }
151
+
152
+
153
+    /**
154
+     * Returns the sub-client given by its name.
155
+     *
156
+     * @param string $type Name of the client type
157
+     * @param string|null $name Name of the sub-client (Default if null)
158
+     * @return \Aimeos\Client\Html\Iface Sub-client object
159
+     */
160
+    public function getSubClient( $type, $name = null )
161
+    {
162
+        /** client/html/catalog/detail/image/decorators/excludes
163
+         * Excludes decorators added by the "common" option from the catalog detail image html client
164
+         *
165
+         * Decorators extend the functionality of a class by adding new aspects
166
+         * (e.g. log what is currently done), executing the methods of the underlying
167
+         * class only in certain conditions (e.g. only for logged in users) or
168
+         * modify what is returned to the caller.
169
+         *
170
+         * This option allows you to remove a decorator added via
171
+         * "client/html/common/decorators/default" before they are wrapped
172
+         * around the html client.
173
+         *
174
+         *  client/html/catalog/detail/image/decorators/excludes = array( 'decorator1' )
175
+         *
176
+         * This would remove the decorator named "decorator1" from the list of
177
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
178
+         * "client/html/common/decorators/default" to the html client.
179
+         *
180
+         * @param array List of decorator names
181
+         * @since 2015.08
182
+         * @category Developer
183
+         * @see client/html/common/decorators/default
184
+         * @see client/html/catalog/detail/image/decorators/global
185
+         * @see client/html/catalog/detail/image/decorators/local
186
+         */
187
+
188
+        /** client/html/catalog/detail/image/decorators/global
189
+         * Adds a list of globally available decorators only to the catalog detail image html client
190
+         *
191
+         * Decorators extend the functionality of a class by adding new aspects
192
+         * (e.g. log what is currently done), executing the methods of the underlying
193
+         * class only in certain conditions (e.g. only for logged in users) or
194
+         * modify what is returned to the caller.
195
+         *
196
+         * This option allows you to wrap global decorators
197
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
198
+         *
199
+         *  client/html/catalog/detail/image/decorators/global = array( 'decorator1' )
200
+         *
201
+         * This would add the decorator named "decorator1" defined by
202
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
203
+         *
204
+         * @param array List of decorator names
205
+         * @since 2015.08
206
+         * @category Developer
207
+         * @see client/html/common/decorators/default
208
+         * @see client/html/catalog/detail/image/decorators/excludes
209
+         * @see client/html/catalog/detail/image/decorators/local
210
+         */
211
+
212
+        /** client/html/catalog/detail/image/decorators/local
213
+         * Adds a list of local decorators only to the catalog detail image html client
214
+         *
215
+         * Decorators extend the functionality of a class by adding new aspects
216
+         * (e.g. log what is currently done), executing the methods of the underlying
217
+         * class only in certain conditions (e.g. only for logged in users) or
218
+         * modify what is returned to the caller.
219
+         *
220
+         * This option allows you to wrap local decorators
221
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
222
+         *
223
+         *  client/html/catalog/detail/image/decorators/local = array( 'decorator2' )
224
+         *
225
+         * This would add the decorator named "decorator2" defined by
226
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
227
+         *
228
+         * @param array List of decorator names
229
+         * @since 2015.08
230
+         * @category Developer
231
+         * @see client/html/common/decorators/default
232
+         * @see client/html/catalog/detail/image/decorators/excludes
233
+         * @see client/html/catalog/detail/image/decorators/global
234
+         */
235
+
236
+        return $this->createSubClient( 'catalog/detail/image/' . $type, $name );
237
+    }
238
+
239
+
240
+    /**
241
+     * Returns the list of sub-client names configured for the client.
242
+     *
243
+     * @return array List of HTML client names
244
+     */
245
+    protected function getSubClientNames()
246
+    {
247
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
248
+    }
249 249
 }
250 250
\ No newline at end of file
Please login to merge, or discard this patch.
client/html/src/Client/Html/Catalog/Detail/Suggest/Standard.php 1 patch
Indentation   +297 added lines, -297 removed lines patch added patch discarded remove patch
@@ -19,302 +19,302 @@
 block discarded – undo
19 19
  * @subpackage Html
20 20
  */
21 21
 class Standard
22
-	extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
-	implements \Aimeos\Client\Html\Common\Client\Factory\Iface
22
+    extends \Aimeos\Client\Html\Common\Client\Factory\Base
23
+    implements \Aimeos\Client\Html\Common\Client\Factory\Iface
24 24
 {
25
-	/** client/html/catalog/detail/suggest/standard/subparts
26
-	 * List of HTML sub-clients rendered within the catalog detail suggest section
27
-	 *
28
-	 * The output of the frontend is composed of the code generated by the HTML
29
-	 * clients. Each HTML client can consist of serveral (or none) sub-clients
30
-	 * that are responsible for rendering certain sub-parts of the output. The
31
-	 * sub-clients can contain HTML clients themselves and therefore a
32
-	 * hierarchical tree of HTML clients is composed. Each HTML client creates
33
-	 * the output that is placed inside the container of its parent.
34
-	 *
35
-	 * At first, always the HTML code generated by the parent is printed, then
36
-	 * the HTML code of its sub-clients. The order of the HTML sub-clients
37
-	 * determines the order of the output of these sub-clients inside the parent
38
-	 * container. If the configured list of clients is
39
-	 *
40
-	 *  array( "subclient1", "subclient2" )
41
-	 *
42
-	 * you can easily change the order of the output by reordering the subparts:
43
-	 *
44
-	 *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
-	 *
46
-	 * You can also remove one or more parts if they shouldn't be rendered:
47
-	 *
48
-	 *  client/html/<clients>/subparts = array( "subclient1" )
49
-	 *
50
-	 * As the clients only generates structural HTML, the layout defined via CSS
51
-	 * should support adding, removing or reordering content by a fluid like
52
-	 * design.
53
-	 *
54
-	 * @param array List of sub-client names
55
-	 * @since 2014.03
56
-	 * @category Developer
57
-	 */
58
-	private $subPartPath = 'client/html/catalog/detail/suggest/standard/subparts';
59
-	private $subPartNames = array();
60
-	private $tags = array();
61
-	private $expire;
62
-	private $cache;
63
-
64
-
65
-	/**
66
-	 * Returns the HTML code for insertion into the body.
67
-	 *
68
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
-	 * @param array &$tags Result array for the list of tags that are associated to the output
70
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
-	 * @return string HTML code
72
-	 */
73
-	public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
-	{
75
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
76
-
77
-		$html = '';
78
-		foreach( $this->getSubClients() as $subclient ) {
79
-			$html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
-		}
81
-		$view->suggestBody = $html;
82
-
83
-		/** client/html/catalog/detail/suggest/standard/template-body
84
-		 * Relative path to the HTML body template of the catalog detail suggest client.
85
-		 *
86
-		 * The template file contains the HTML code and processing instructions
87
-		 * to generate the result shown in the body of the frontend. The
88
-		 * configuration string is the path to the template file relative
89
-		 * to the templates directory (usually in client/html/templates).
90
-		 *
91
-		 * You can overwrite the template file configuration in extensions and
92
-		 * provide alternative templates. These alternative templates should be
93
-		 * named like the default one but with the string "standard" replaced by
94
-		 * an unique name. You may use the name of your project for this. If
95
-		 * you've implemented an alternative client class as well, "standard"
96
-		 * should be replaced by the name of the new class.
97
-		 *
98
-		 * @param string Relative path to the template creating code for the HTML page body
99
-		 * @since 2014.03
100
-		 * @category Developer
101
-		 * @see client/html/catalog/detail/suggest/standard/template-header
102
-		 */
103
-		$tplconf = 'client/html/catalog/detail/suggest/standard/template-body';
104
-		$default = 'catalog/detail/suggest-body-default.php';
105
-
106
-		return $view->render( $view->config( $tplconf, $default ) );
107
-	}
108
-
109
-
110
-	/**
111
-	 * Returns the HTML string for insertion into the header.
112
-	 *
113
-	 * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
-	 * @param array &$tags Result array for the list of tags that are associated to the output
115
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
-	 * @return string|null String including HTML tags for the header on error
117
-	 */
118
-	public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
-	{
120
-		$view = $this->setViewParams( $this->getView(), $tags, $expire );
121
-
122
-		$html = '';
123
-		foreach( $this->getSubClients() as $subclient ) {
124
-			$html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
-		}
126
-		$view->suggestHeader = $html;
127
-
128
-		/** client/html/catalog/detail/suggest/standard/template-header
129
-		 * Relative path to the HTML header template of the catalog detail suggest client.
130
-		 *
131
-		 * The template file contains the HTML code and processing instructions
132
-		 * to generate the HTML code that is inserted into the HTML page header
133
-		 * of the rendered page in the frontend. The configuration string is the
134
-		 * path to the template file relative to the templates directory (usually
135
-		 * in client/html/templates).
136
-		 *
137
-		 * You can overwrite the template file configuration in extensions and
138
-		 * provide alternative templates. These alternative templates should be
139
-		 * named like the default one but with the string "standard" replaced by
140
-		 * an unique name. You may use the name of your project for this. If
141
-		 * you've implemented an alternative client class as well, "standard"
142
-		 * should be replaced by the name of the new class.
143
-		 *
144
-		 * @param string Relative path to the template creating code for the HTML page head
145
-		 * @since 2014.03
146
-		 * @category Developer
147
-		 * @see client/html/catalog/detail/suggest/standard/template-body
148
-		 */
149
-		$tplconf = 'client/html/catalog/detail/suggest/standard/template-header';
150
-		$default = 'catalog/detail/suggest-header-default.php';
151
-
152
-		return $view->render( $view->config( $tplconf, $default ) );
153
-	}
154
-
155
-
156
-	/**
157
-	 * Returns the sub-client given by its name.
158
-	 *
159
-	 * @param string $type Name of the client type
160
-	 * @param string|null $name Name of the sub-client (Default if null)
161
-	 * @return \Aimeos\Client\Html\Iface Sub-client object
162
-	 */
163
-	public function getSubClient( $type, $name = null )
164
-	{
165
-		/** client/html/catalog/detail/suggest/decorators/excludes
166
-		 * Excludes decorators added by the "common" option from the catalog detail suggest html client
167
-		 *
168
-		 * Decorators extend the functionality of a class by adding new aspects
169
-		 * (e.g. log what is currently done), executing the methods of the underlying
170
-		 * class only in certain conditions (e.g. only for logged in users) or
171
-		 * modify what is returned to the caller.
172
-		 *
173
-		 * This option allows you to remove a decorator added via
174
-		 * "client/html/common/decorators/default" before they are wrapped
175
-		 * around the html client.
176
-		 *
177
-		 *  client/html/catalog/detail/suggest/decorators/excludes = array( 'decorator1' )
178
-		 *
179
-		 * This would remove the decorator named "decorator1" from the list of
180
-		 * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
-		 * "client/html/common/decorators/default" to the html client.
182
-		 *
183
-		 * @param array List of decorator names
184
-		 * @since 2015.08
185
-		 * @category Developer
186
-		 * @see client/html/common/decorators/default
187
-		 * @see client/html/catalog/detail/suggest/decorators/global
188
-		 * @see client/html/catalog/detail/suggest/decorators/local
189
-		 */
190
-
191
-		/** client/html/catalog/detail/suggest/decorators/global
192
-		 * Adds a list of globally available decorators only to the catalog detail suggest html client
193
-		 *
194
-		 * Decorators extend the functionality of a class by adding new aspects
195
-		 * (e.g. log what is currently done), executing the methods of the underlying
196
-		 * class only in certain conditions (e.g. only for logged in users) or
197
-		 * modify what is returned to the caller.
198
-		 *
199
-		 * This option allows you to wrap global decorators
200
-		 * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
-		 *
202
-		 *  client/html/catalog/detail/suggest/decorators/global = array( 'decorator1' )
203
-		 *
204
-		 * This would add the decorator named "decorator1" defined by
205
-		 * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
-		 *
207
-		 * @param array List of decorator names
208
-		 * @since 2015.08
209
-		 * @category Developer
210
-		 * @see client/html/common/decorators/default
211
-		 * @see client/html/catalog/detail/suggest/decorators/excludes
212
-		 * @see client/html/catalog/detail/suggest/decorators/local
213
-		 */
214
-
215
-		/** client/html/catalog/detail/suggest/decorators/local
216
-		 * Adds a list of local decorators only to the catalog detail suggest html client
217
-		 *
218
-		 * Decorators extend the functionality of a class by adding new aspects
219
-		 * (e.g. log what is currently done), executing the methods of the underlying
220
-		 * class only in certain conditions (e.g. only for logged in users) or
221
-		 * modify what is returned to the caller.
222
-		 *
223
-		 * This option allows you to wrap local decorators
224
-		 * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
-		 *
226
-		 *  client/html/catalog/detail/suggest/decorators/local = array( 'decorator2' )
227
-		 *
228
-		 * This would add the decorator named "decorator2" defined by
229
-		 * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
-		 *
231
-		 * @param array List of decorator names
232
-		 * @since 2015.08
233
-		 * @category Developer
234
-		 * @see client/html/common/decorators/default
235
-		 * @see client/html/catalog/detail/suggest/decorators/excludes
236
-		 * @see client/html/catalog/detail/suggest/decorators/global
237
-		 */
238
-
239
-		return $this->createSubClient( 'catalog/detail/suggest/' . $type, $name );
240
-	}
241
-
242
-
243
-	/**
244
-	 * Returns the list of sub-client names configured for the client.
245
-	 *
246
-	 * @return array List of HTML client names
247
-	 */
248
-	protected function getSubClientNames()
249
-	{
250
-		return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
-	}
252
-
253
-
254
-	/**
255
-	 * Sets the necessary parameter values in the view.
256
-	 *
257
-	 * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
-	 * @param array &$tags Result array for the list of tags that are associated to the output
259
-	 * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
-	 * @return \Aimeos\MW\View\Iface Modified view object
261
-	 */
262
-	protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
-	{
264
-		if( !isset( $this->cache ) )
265
-		{
266
-			if( isset( $view->detailProductItem ) )
267
-			{
268
-				$context = $this->getContext();
269
-				$config = $context->getConfig();
270
-				$domains = array( 'text', 'price', 'media' );
271
-				$products = $view->detailProductItem->getRefItems( 'product', null, 'suggestion' );
272
-
273
-				$controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
274
-
275
-				/** client/html/catalog/detail/domains
276
-				 * A list of domain names whose items should be available in the catalog view templates
277
-				 *
278
-				 * @see client/html/catalog/detail/domains
279
-				 */
280
-				$domains = $config->get( 'client/html/catalog/detail/domains', $domains );
281
-
282
-				/** client/html/catalog/detail/suggest/domains
283
-				 * A list of domain names whose items should be available in the suggestion part of the catalog detail view templates
284
-				 *
285
-				 * The templates rendering suggestion related data usually add
286
-				 * the images and texts associated to each item. If you want to
287
-				 * display additional content like the attributes, you can configure
288
-				 * your own list of domains (attribute, media, price, product, text,
289
-				 * etc. are domains) whose items are fetched from the storage.
290
-				 * Please keep in mind that the more domains you add to the
291
-				 * configuration, the more time is required for fetching the content!
292
-				 *
293
-				 * This configuration option can be overwritten by the
294
-				 * "client/html/catalog/detail/domains" configuration option that
295
-				 * allows to configure the domain names of the items fetched
296
-				 * specifically for all types of product listings.
297
-				 *
298
-				 * @param array List of domain names
299
-				 * @since 2015.09
300
-				 * @category Developer
301
-				 * @see client/html/catalog/detail/domains
302
-				 */
303
-				$domains = $config->get( 'client/html/catalog/detail/suggest/domains', $domains );
304
-
305
-				$view->suggestItems = $controller->getProductItems( array_keys( $products ), $domains );
306
-				$view->suggestPosItems = $products;
307
-
308
-				$this->addMetaItem( $view->suggestItems, 'product', $this->expire, $this->tags );
309
-				$this->addMetaList( array_keys( $view->suggestItems ), 'product', $this->expire );
310
-			}
311
-
312
-			$this->cache = $view;
313
-		}
314
-
315
-		$expire = $this->expires( $this->expire, $expire );
316
-		$tags = array_merge( $tags, $this->tags );
317
-
318
-		return $this->cache;
319
-	}
25
+    /** client/html/catalog/detail/suggest/standard/subparts
26
+     * List of HTML sub-clients rendered within the catalog detail suggest section
27
+     *
28
+     * The output of the frontend is composed of the code generated by the HTML
29
+     * clients. Each HTML client can consist of serveral (or none) sub-clients
30
+     * that are responsible for rendering certain sub-parts of the output. The
31
+     * sub-clients can contain HTML clients themselves and therefore a
32
+     * hierarchical tree of HTML clients is composed. Each HTML client creates
33
+     * the output that is placed inside the container of its parent.
34
+     *
35
+     * At first, always the HTML code generated by the parent is printed, then
36
+     * the HTML code of its sub-clients. The order of the HTML sub-clients
37
+     * determines the order of the output of these sub-clients inside the parent
38
+     * container. If the configured list of clients is
39
+     *
40
+     *  array( "subclient1", "subclient2" )
41
+     *
42
+     * you can easily change the order of the output by reordering the subparts:
43
+     *
44
+     *  client/html/<clients>/subparts = array( "subclient1", "subclient2" )
45
+     *
46
+     * You can also remove one or more parts if they shouldn't be rendered:
47
+     *
48
+     *  client/html/<clients>/subparts = array( "subclient1" )
49
+     *
50
+     * As the clients only generates structural HTML, the layout defined via CSS
51
+     * should support adding, removing or reordering content by a fluid like
52
+     * design.
53
+     *
54
+     * @param array List of sub-client names
55
+     * @since 2014.03
56
+     * @category Developer
57
+     */
58
+    private $subPartPath = 'client/html/catalog/detail/suggest/standard/subparts';
59
+    private $subPartNames = array();
60
+    private $tags = array();
61
+    private $expire;
62
+    private $cache;
63
+
64
+
65
+    /**
66
+     * Returns the HTML code for insertion into the body.
67
+     *
68
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
69
+     * @param array &$tags Result array for the list of tags that are associated to the output
70
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
71
+     * @return string HTML code
72
+     */
73
+    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
74
+    {
75
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
76
+
77
+        $html = '';
78
+        foreach( $this->getSubClients() as $subclient ) {
79
+            $html .= $subclient->setView( $view )->getBody( $uid, $tags, $expire );
80
+        }
81
+        $view->suggestBody = $html;
82
+
83
+        /** client/html/catalog/detail/suggest/standard/template-body
84
+         * Relative path to the HTML body template of the catalog detail suggest client.
85
+         *
86
+         * The template file contains the HTML code and processing instructions
87
+         * to generate the result shown in the body of the frontend. The
88
+         * configuration string is the path to the template file relative
89
+         * to the templates directory (usually in client/html/templates).
90
+         *
91
+         * You can overwrite the template file configuration in extensions and
92
+         * provide alternative templates. These alternative templates should be
93
+         * named like the default one but with the string "standard" replaced by
94
+         * an unique name. You may use the name of your project for this. If
95
+         * you've implemented an alternative client class as well, "standard"
96
+         * should be replaced by the name of the new class.
97
+         *
98
+         * @param string Relative path to the template creating code for the HTML page body
99
+         * @since 2014.03
100
+         * @category Developer
101
+         * @see client/html/catalog/detail/suggest/standard/template-header
102
+         */
103
+        $tplconf = 'client/html/catalog/detail/suggest/standard/template-body';
104
+        $default = 'catalog/detail/suggest-body-default.php';
105
+
106
+        return $view->render( $view->config( $tplconf, $default ) );
107
+    }
108
+
109
+
110
+    /**
111
+     * Returns the HTML string for insertion into the header.
112
+     *
113
+     * @param string $uid Unique identifier for the output if the content is placed more than once on the same page
114
+     * @param array &$tags Result array for the list of tags that are associated to the output
115
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
116
+     * @return string|null String including HTML tags for the header on error
117
+     */
118
+    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
119
+    {
120
+        $view = $this->setViewParams( $this->getView(), $tags, $expire );
121
+
122
+        $html = '';
123
+        foreach( $this->getSubClients() as $subclient ) {
124
+            $html .= $subclient->setView( $view )->getHeader( $uid, $tags, $expire );
125
+        }
126
+        $view->suggestHeader = $html;
127
+
128
+        /** client/html/catalog/detail/suggest/standard/template-header
129
+         * Relative path to the HTML header template of the catalog detail suggest client.
130
+         *
131
+         * The template file contains the HTML code and processing instructions
132
+         * to generate the HTML code that is inserted into the HTML page header
133
+         * of the rendered page in the frontend. The configuration string is the
134
+         * path to the template file relative to the templates directory (usually
135
+         * in client/html/templates).
136
+         *
137
+         * You can overwrite the template file configuration in extensions and
138
+         * provide alternative templates. These alternative templates should be
139
+         * named like the default one but with the string "standard" replaced by
140
+         * an unique name. You may use the name of your project for this. If
141
+         * you've implemented an alternative client class as well, "standard"
142
+         * should be replaced by the name of the new class.
143
+         *
144
+         * @param string Relative path to the template creating code for the HTML page head
145
+         * @since 2014.03
146
+         * @category Developer
147
+         * @see client/html/catalog/detail/suggest/standard/template-body
148
+         */
149
+        $tplconf = 'client/html/catalog/detail/suggest/standard/template-header';
150
+        $default = 'catalog/detail/suggest-header-default.php';
151
+
152
+        return $view->render( $view->config( $tplconf, $default ) );
153
+    }
154
+
155
+
156
+    /**
157
+     * Returns the sub-client given by its name.
158
+     *
159
+     * @param string $type Name of the client type
160
+     * @param string|null $name Name of the sub-client (Default if null)
161
+     * @return \Aimeos\Client\Html\Iface Sub-client object
162
+     */
163
+    public function getSubClient( $type, $name = null )
164
+    {
165
+        /** client/html/catalog/detail/suggest/decorators/excludes
166
+         * Excludes decorators added by the "common" option from the catalog detail suggest html client
167
+         *
168
+         * Decorators extend the functionality of a class by adding new aspects
169
+         * (e.g. log what is currently done), executing the methods of the underlying
170
+         * class only in certain conditions (e.g. only for logged in users) or
171
+         * modify what is returned to the caller.
172
+         *
173
+         * This option allows you to remove a decorator added via
174
+         * "client/html/common/decorators/default" before they are wrapped
175
+         * around the html client.
176
+         *
177
+         *  client/html/catalog/detail/suggest/decorators/excludes = array( 'decorator1' )
178
+         *
179
+         * This would remove the decorator named "decorator1" from the list of
180
+         * common decorators ("\Aimeos\Client\Html\Common\Decorator\*") added via
181
+         * "client/html/common/decorators/default" to the html client.
182
+         *
183
+         * @param array List of decorator names
184
+         * @since 2015.08
185
+         * @category Developer
186
+         * @see client/html/common/decorators/default
187
+         * @see client/html/catalog/detail/suggest/decorators/global
188
+         * @see client/html/catalog/detail/suggest/decorators/local
189
+         */
190
+
191
+        /** client/html/catalog/detail/suggest/decorators/global
192
+         * Adds a list of globally available decorators only to the catalog detail suggest html client
193
+         *
194
+         * Decorators extend the functionality of a class by adding new aspects
195
+         * (e.g. log what is currently done), executing the methods of the underlying
196
+         * class only in certain conditions (e.g. only for logged in users) or
197
+         * modify what is returned to the caller.
198
+         *
199
+         * This option allows you to wrap global decorators
200
+         * ("\Aimeos\Client\Html\Common\Decorator\*") around the html client.
201
+         *
202
+         *  client/html/catalog/detail/suggest/decorators/global = array( 'decorator1' )
203
+         *
204
+         * This would add the decorator named "decorator1" defined by
205
+         * "\Aimeos\Client\Html\Common\Decorator\Decorator1" only to the html client.
206
+         *
207
+         * @param array List of decorator names
208
+         * @since 2015.08
209
+         * @category Developer
210
+         * @see client/html/common/decorators/default
211
+         * @see client/html/catalog/detail/suggest/decorators/excludes
212
+         * @see client/html/catalog/detail/suggest/decorators/local
213
+         */
214
+
215
+        /** client/html/catalog/detail/suggest/decorators/local
216
+         * Adds a list of local decorators only to the catalog detail suggest html client
217
+         *
218
+         * Decorators extend the functionality of a class by adding new aspects
219
+         * (e.g. log what is currently done), executing the methods of the underlying
220
+         * class only in certain conditions (e.g. only for logged in users) or
221
+         * modify what is returned to the caller.
222
+         *
223
+         * This option allows you to wrap local decorators
224
+         * ("\Aimeos\Client\Html\Catalog\Decorator\*") around the html client.
225
+         *
226
+         *  client/html/catalog/detail/suggest/decorators/local = array( 'decorator2' )
227
+         *
228
+         * This would add the decorator named "decorator2" defined by
229
+         * "\Aimeos\Client\Html\Catalog\Decorator\Decorator2" only to the html client.
230
+         *
231
+         * @param array List of decorator names
232
+         * @since 2015.08
233
+         * @category Developer
234
+         * @see client/html/common/decorators/default
235
+         * @see client/html/catalog/detail/suggest/decorators/excludes
236
+         * @see client/html/catalog/detail/suggest/decorators/global
237
+         */
238
+
239
+        return $this->createSubClient( 'catalog/detail/suggest/' . $type, $name );
240
+    }
241
+
242
+
243
+    /**
244
+     * Returns the list of sub-client names configured for the client.
245
+     *
246
+     * @return array List of HTML client names
247
+     */
248
+    protected function getSubClientNames()
249
+    {
250
+        return $this->getContext()->getConfig()->get( $this->subPartPath, $this->subPartNames );
251
+    }
252
+
253
+
254
+    /**
255
+     * Sets the necessary parameter values in the view.
256
+     *
257
+     * @param \Aimeos\MW\View\Iface $view The view object which generates the HTML output
258
+     * @param array &$tags Result array for the list of tags that are associated to the output
259
+     * @param string|null &$expire Result variable for the expiration date of the output (null for no expiry)
260
+     * @return \Aimeos\MW\View\Iface Modified view object
261
+     */
262
+    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
263
+    {
264
+        if( !isset( $this->cache ) )
265
+        {
266
+            if( isset( $view->detailProductItem ) )
267
+            {
268
+                $context = $this->getContext();
269
+                $config = $context->getConfig();
270
+                $domains = array( 'text', 'price', 'media' );
271
+                $products = $view->detailProductItem->getRefItems( 'product', null, 'suggestion' );
272
+
273
+                $controller = \Aimeos\Controller\Frontend\Factory::createController( $context, 'catalog' );
274
+
275
+                /** client/html/catalog/detail/domains
276
+                 * A list of domain names whose items should be available in the catalog view templates
277
+                 *
278
+                 * @see client/html/catalog/detail/domains
279
+                 */
280
+                $domains = $config->get( 'client/html/catalog/detail/domains', $domains );
281
+
282
+                /** client/html/catalog/detail/suggest/domains
283
+                 * A list of domain names whose items should be available in the suggestion part of the catalog detail view templates
284
+                 *
285
+                 * The templates rendering suggestion related data usually add
286
+                 * the images and texts associated to each item. If you want to
287
+                 * display additional content like the attributes, you can configure
288
+                 * your own list of domains (attribute, media, price, product, text,
289
+                 * etc. are domains) whose items are fetched from the storage.
290
+                 * Please keep in mind that the more domains you add to the
291
+                 * configuration, the more time is required for fetching the content!
292
+                 *
293
+                 * This configuration option can be overwritten by the
294
+                 * "client/html/catalog/detail/domains" configuration option that
295
+                 * allows to configure the domain names of the items fetched
296
+                 * specifically for all types of product listings.
297
+                 *
298
+                 * @param array List of domain names
299
+                 * @since 2015.09
300
+                 * @category Developer
301
+                 * @see client/html/catalog/detail/domains
302
+                 */
303
+                $domains = $config->get( 'client/html/catalog/detail/suggest/domains', $domains );
304
+
305
+                $view->suggestItems = $controller->getProductItems( array_keys( $products ), $domains );
306
+                $view->suggestPosItems = $products;
307
+
308
+                $this->addMetaItem( $view->suggestItems, 'product', $this->expire, $this->tags );
309
+                $this->addMetaList( array_keys( $view->suggestItems ), 'product', $this->expire );
310
+            }
311
+
312
+            $this->cache = $view;
313
+        }
314
+
315
+        $expire = $this->expires( $this->expire, $expire );
316
+        $tags = array_merge( $tags, $this->tags );
317
+
318
+        return $this->cache;
319
+    }
320 320
 }
321 321
\ No newline at end of file
Please login to merge, or discard this patch.