1 <?php
2 3 4 5 6
7 class FavoritePage extends Page {
8
9 static $defaults = array(
10 'DevEditType' => 'Fixed',
11 'AutoChild' => 0
12 );
13 static $allowed_children = 'none';
14
15 protected static $favorite_object_class = 'Product';
16
17 static $favorite_cookie_name = 'FavoriteProducts';
18
19 20 21 22 23
24 static function find_link($action = false, $productID = false) {
25 if (!$page = DataObject::get_one('FavoritePage')) {
26 user_error('Создайте страницу "Избранные товары"', E_USER_ERROR);
27 }
28 if ($action == false) {
29 return $page->Link();
30 } else {
31 return $page->Link($action . "/{$productID}");
32 }
33 }
34
35 36 37 38 39
40 static function get_favorite_object_class() {
41 return self::$favorite_object_class;
42 }
43
44 45 46 47 48
49 static function set_favorite_object_class($class) {
50 self::$favorite_object_class = $class;
51 }
52
53 54 55 56 57
58 static function get_user_favorites() {
59 $member = Member::currentUser();
60 if ($member) {
61 $IDs = base64_decode($member->FavoriteProducts);
62 } else {
63 $IDs = CookieExtention::get_cookie_data(FavoritePage::$favorite_cookie_name);
64 }
65 return $IDs;
66 }
67
68 function canCreate($member = false) {
69 $favoritePage = Dataobject::get_one('FavoritePage');
70 if ($favoritePage) {
71 return false;
72 }
73 return parent::canCreate($member);
74 }
75
76 function canDelete($member = false) {
77 if (Director::isDev()) {
78 return true;
79 }
80 return parent::canDelete($member);
81 }
82
83 84 85 86 87
88 function ShowFavoriteObjects() {
89 $IDs = self::get_user_favorites();
90 $rs = new DataObjectSet();
91 if ($IDs) {
92 $IDs = explode(',', $IDs);
93 foreach($IDs as $id) {
94 if ($object = Dataobject::get_by_id(self::$favorite_object_class, (int)$id)) {
95 $rs->push($object);
96 }
97 }
98 }
99 return $rs;
100 }
101
102 103 104 105 106
107 function ShowFavoriteProducts() {
108 return $this->ShowFavoriteObjects();
109 }
110
111 112 113 114 115
116 function FavoriteCount() {
117 $IDs = self::get_user_favorites();
118 $count = 0;
119 if ($IDs) {
120 $IDs = explode(',', $IDs);
121 $count = count($IDs);
122 }
123 return $count;
124 }
125
126 function requireDefaultRecords() {
127 parent::requireDefaultRecords();
128
129 if ($this->class != 'FavoritePage') return;
130
131 if(!($page = SiteTree::get_by_link('favorite'))) {
132 $page = new FavoritePage();
133 $page->Title = _t('SiteTree.DEFAULTFAVORITETITLE', 'Favorite');
134 $page->Content = _t('SiteTree.DEFAULTFAVORITECONTENT', '<p>Welcome to SilverStripe! This is the default Favorite page. </p>');
135 $page->URLSegment = 'favorite';
136 $page->Status = 'Published';
137
138 $page->write();
139 $page->publish('Stage', 'Live');
140 $page->flushCache();
141 DB::alteration_message('Favorite page created', 'created');
142 }
143 }
144 }
145
146 class FavoritePage_Controller extends Page_Controller {
147
148 149 150 151
152 function clear_favorite() {
153 CookieExtention::clear_cookies(FavoritePage::$favorite_cookie_name);
154 FavoriteProductMemberExtention::saveFavorites('');
155 if (!$this->isAjax())
156 Director::redirectBack();
157 return Convert::raw2json('success');
158 }
159
160 161 162 163
164 function additem($params) {
165 $rs = false;
166 $params = $params->allParams();
167 if (isset($params['ID'])) {
168 $productID[] = $params['ID'];
169 $rs = CookieExtention::add_item_to_cookie(FavoritePage::$favorite_cookie_name, $productID);
170 FavoriteProductMemberExtention::saveFavorites($rs);
171 }
172 if (!$this->isAjax())
173 Director::redirectBack();
174 if (trim($rs)) {
175 return Convert::raw2json(count(explode(',', $rs)));
176 }
177 return 0;
178 }
179
180 181 182 183
184 function deleteitem($params) {
185 $rs = false;
186 $params = $params->allParams();
187 if (isset($params['ID'])) {
188 $productID[] = $params['ID'];
189 $rs = CookieExtention::delete_item_from_cookie(FavoritePage::$favorite_cookie_name, $productID);
190 FavoriteProductMemberExtention::saveFavorites($rs);
191 }
192 if (!$this->isAjax())
193 Director::redirectBack();
194 if (trim($rs)) {
195 return Convert::raw2json(count(explode(',', $rs)));
196 }
197 return 0;
198 }
199 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-