Namespaces

  • Nette
    • Application
    • Caching
    • Collections
    • Config
    • Forms
    • IO
    • Loaders
    • Mail
    • Reflection
    • Security
    • Templates
    • Web
  • None
  • PHP

Classes

  • AppForm
  • Application
  • CliRouter
  • Control
  • DownloadResponse
  • ForwardingResponse
  • JsonResponse
  • Link
  • MultiRouter
  • Presenter
  • PresenterComponent
  • PresenterLoader
  • PresenterRequest
  • RedirectingResponse
  • RenderResponse
  • Route
  • SimpleRouter

Interfaces

  • IPartiallyRenderable
  • IPresenter
  • IPresenterLoader
  • IPresenterResponse
  • IRenderable
  • IRouter
  • ISignalReceiver
  • IStatePersistent

Exceptions

  • AbortException
  • ApplicationException
  • BadRequestException
  • BadSignalException
  • ForbiddenRequestException
  • InvalidLinkException
  • InvalidPresenterException
  • Overview
  • Namespace
  • Class
  • Tree
  • Other releases
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (https://nette.org)
  5:  *
  6:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  7:  *
  8:  * For the full copyright and license information, please view
  9:  * the file license.txt that was distributed with this source code.
 10:  */
 11: 
 12: namespace Nette\Application;
 13: 
 14: use Nette;
 15: 
 16: 
 17: 
 18: /**
 19:  * Control is renderable component.
 20:  *
 21:  * @author     David Grudl
 22:  *
 23:  * @property-read Nette\Templates\ITemplate $template
 24:  */
 25: abstract class Control extends PresenterComponent implements IPartiallyRenderable
 26: {
 27:     /** @var Nette\Templates\ITemplate */
 28:     private $template;
 29: 
 30:     /** @var array */
 31:     private $invalidSnippets = array();
 32: 
 33: 
 34: 
 35:     /********************* template factory ****************d*g**/
 36: 
 37: 
 38: 
 39:     /**
 40:      * @return Nette\Templates\ITemplate
 41:      */
 42:     final public function getTemplate()
 43:     {
 44:         if ($this->template === NULL) {
 45:             $value = $this->createTemplate();
 46:             if (!($value instanceof Nette\Templates\ITemplate || $value === NULL)) {
 47:                 $class = get_class($value);
 48:                 throw new \UnexpectedValueException("Object returned by {$this->reflection->name}::createTemplate() must be instance of Nette\\Templates\\ITemplate, '$class' given.");
 49:             }
 50:             $this->template = $value;
 51:         }
 52:         return $this->template;
 53:     }
 54: 
 55: 
 56: 
 57:     /**
 58:      * @return Nette\Templates\ITemplate
 59:      */
 60:     protected function createTemplate()
 61:     {
 62:         $template = new Nette\Templates\Template;
 63:         $presenter = $this->getPresenter(FALSE);
 64:         $template->onPrepareFilters[] = array($this, 'templatePrepareFilters');
 65: 
 66:         // default parameters
 67:         $template->component = $this; // DEPRECATED!
 68:         $template->control = $this;
 69:         $template->presenter = $presenter;
 70:         $template->baseUri = Nette\Environment::getVariable('baseUri');
 71:         $template->basePath = rtrim($template->baseUri, '/');
 72: 
 73:         // flash message
 74:         if ($presenter !== NULL && $presenter->hasFlashSession()) {
 75:             $id = $this->getParamId('flash');
 76:             $template->flashes = $presenter->getFlashSession()->$id;
 77:         }
 78:         if (!isset($template->flashes) || !is_array($template->flashes)) {
 79:             $template->flashes = array();
 80:         }
 81: 
 82:         // default helpers
 83:         $template->registerHelper('escape', 'Nette\Templates\TemplateHelpers::escapeHtml');
 84:         $template->registerHelper('escapeUrl', 'rawurlencode');
 85:         $template->registerHelper('stripTags', 'strip_tags');
 86:         $template->registerHelper('nl2br', 'nl2br');
 87:         $template->registerHelper('substr', 'iconv_substr');
 88:         $template->registerHelper('repeat', 'str_repeat');
 89:         $template->registerHelper('implode', 'implode');
 90:         $template->registerHelper('number', 'number_format');
 91:         $template->registerHelperLoader('Nette\Templates\TemplateHelpers::loader');
 92: 
 93:         return $template;
 94:     }
 95: 
 96: 
 97: 
 98:     /**
 99:      * Descendant can override this method to customize template compile-time filters.
100:      * @param  Nette\Templates\Template
101:      * @return void
102:      */
103:     public function templatePrepareFilters($template)
104:     {
105:         // default filters
106:         $template->registerFilter(new Nette\Templates\LatteFilter);
107:     }
108: 
109: 
110: 
111:     /**
112:      * Returns widget component specified by name.
113:      * @param  string
114:      * @return IComponent
115:      */
116:     public function getWidget($name)
117:     {
118:         return $this->getComponent($name);
119:     }
120: 
121: 
122: 
123:     /**
124:      * Saves the message to template, that can be displayed after redirect.
125:      * @param  string
126:      * @param  string
127:      * @return stdClass
128:      */
129:     public function flashMessage($message, $type = 'info')
130:     {
131:         $id = $this->getParamId('flash');
132:         $messages = $this->getPresenter()->getFlashSession()->$id;
133:         $messages[] = $flash = (object) array(
134:             'message' => $message,
135:             'type' => $type,
136:         );
137:         $this->getTemplate()->flashes = $messages;
138:         $this->getPresenter()->getFlashSession()->$id = $messages;
139:         return $flash;
140:     }
141: 
142: 
143: 
144:     /********************* rendering ****************d*g**/
145: 
146: 
147: 
148:     /**
149:      * Forces control or its snippet to repaint.
150:      * @param  string
151:      * @return void
152:      */
153:     public function invalidateControl($snippet = NULL)
154:     {
155:         $this->invalidSnippets[$snippet] = TRUE;
156:     }
157: 
158: 
159: 
160:     /**
161:      * Allows control or its snippet to not repaint.
162:      * @param  string
163:      * @return void
164:      */
165:     public function validateControl($snippet = NULL)
166:     {
167:         if ($snippet === NULL) {
168:             $this->invalidSnippets = array();
169: 
170:         } else {
171:             unset($this->invalidSnippets[$snippet]);
172:         }
173:     }
174: 
175: 
176: 
177:     /**
178:      * Is required to repaint the control or its snippet?
179:      * @param  string  snippet name
180:      * @return bool
181:      */
182:     public function isControlInvalid($snippet = NULL)
183:     {
184:         if ($snippet === NULL) {
185:             if (count($this->invalidSnippets) > 0) {
186:                 return TRUE;
187: 
188:             } else {
189:                 foreach ($this->getComponents() as $component) {
190:                     if ($component instanceof IRenderable && $component->isControlInvalid()) {
191:                         // $this->invalidSnippets['__child'] = TRUE; // as cache
192:                         return TRUE;
193:                     }
194:                 }
195:                 return FALSE;
196:             }
197: 
198:         } else {
199:             return isset($this->invalidSnippets[NULL]) || isset($this->invalidSnippets[$snippet]);
200:         }
201:     }
202: 
203: 
204: 
205:     /**
206:      * Returns snippet HTML ID.
207:      * @param  string  snippet name
208:      * @return string
209:      */
210:     public function getSnippetId($name = NULL)
211:     {
212:         // HTML 4 ID & NAME: [A-Za-z][A-Za-z0-9:_.-]*
213:         return 'snippet-' . $this->getUniqueId() . '-' . $name;
214:     }
215: 
216: }
217: 
Nette Framework 0.9.7 API documentation generated by ApiGen 2.3.0