comparison Lib/IMPL/Web/View/TTDocument.pm @ 310:0a9d51cf6dfd

*TTView: refactoring, document supports custom classes, layouts are become controls
author sergey
date Fri, 19 Apr 2013 16:39:01 +0400
parents 5e4e7c8fbca1
children d3b5a67ad2e8
comparison
equal deleted inserted replaced
309:5e4e7c8fbca1 310:0a9d51cf6dfd
40 40
41 sub Render { 41 sub Render {
42 my ($this,$args) = @_; 42 my ($this,$args) = @_;
43 43
44 $args ||= {}; 44 $args ||= {};
45 $args->{document} = $this;
45 46
46 $this->context->localise(); # localise stash
47 my $documentContext = _clone_context( $this->context ); # create a new context
48
49 $this->context->stash->update({ 47 $this->context->stash->update({
50 document => sub { $this } 48 document => sub { $this }
51 }); 49 });
52 50
53 my $text = eval { 51 my $text = eval {
54 52
55 if ($this->layout) { 53 if ($this->layout) {
56 my $tlayout = $this->registry->loader->layout($this->layout) 54 my $layout = $this->registry->Require(join('/',$this->layoutBase, $this->layout))->new();
57 or die OpException->new('The specified layout isn\'t found', $this->layout); 55
58 if(my $init = $tlayout->blocks->{INIT}) {
59 $this->context->process(
60 $init,
61 hashMerge(
62 $args,
63 {
64 template => $this->template
65 }
66 )
67 );
68 }
69 my $content = $this->next::method($args); 56 my $content = $this->next::method($args);
70 return $this->context->include( 57 return $layout->Render({
71 $tlayout, 58 content => $content,
72 { 59 template => $this->template,
73 %{$args}, 60 document => $this
74 content => $content, 61 });
75 this => $this,
76 template => $this->template
77 }
78 );
79 } else { 62 } else {
80 return $this->next::method($args); 63 return $this->next::method($args);
81 } 64 }
82 }; 65 };
83 66
84 my $e = $@; 67 my $e = $@;
85
86 $this->context->delocalise();
87 68
88 undef $this; 69 undef $this;
89 70
90 if ($e) { 71 if ($e) {
91 die $e; 72 die $e;