diff --git a/app/Builders/CourseFavoriteList.php b/app/Builders/CourseFavoriteList.php
index 9d431f04..e58b88b9 100644
--- a/app/Builders/CourseFavoriteList.php
+++ b/app/Builders/CourseFavoriteList.php
@@ -51,6 +51,9 @@ class CourseFavoriteList extends Builder
foreach ($courses->toArray() as $course) {
$course['cover'] = $baseUrl . $course['cover'];
+ $course['market_price'] = (float)$course['market_price'];
+ $course['vip_price'] = (float)$course['vip_price'];
+ $course['rating'] = (float)$course['rating'];
$course['attrs'] = json_decode($course['attrs'], true);
$result[$course['id']] = $course;
}
diff --git a/app/Http/Web/Controllers/AccountController.php b/app/Http/Web/Controllers/AccountController.php
index adcb0a74..7c3fbfbc 100644
--- a/app/Http/Web/Controllers/AccountController.php
+++ b/app/Http/Web/Controllers/AccountController.php
@@ -7,6 +7,7 @@ use App\Services\Frontend\Account\EmailUpdate as EmailUpdateService;
use App\Services\Frontend\Account\PasswordReset as PasswordResetService;
use App\Services\Frontend\Account\PasswordUpdate as PasswordUpdateService;
use App\Services\Frontend\Account\PhoneUpdate as PhoneUpdateService;
+use Phalcon\Mvc\View;
/**
* @RoutePrefix("/account")
@@ -138,6 +139,60 @@ class AccountController extends Controller
$this->view->setVar('captcha', $captcha);
}
+ /**
+ * @Get("/password/edit", name="web.account.edit_pwd")
+ */
+ public function editPasswordAction()
+ {
+ if ($this->authUser->id == 0) {
+ $this->response->redirect(['for' => 'web.account.login']);
+ }
+
+ $service = new AccountService();
+
+ $captcha = $service->getSectionSettings('captcha');
+
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->pick('account/edit_password');
+ $this->view->setVar('captcha', $captcha);
+ }
+
+ /**
+ * @Get("/phone/edit", name="web.account.edit_phone")
+ */
+ public function editPhoneAction()
+ {
+ if ($this->authUser->id == 0) {
+ $this->response->redirect(['for' => 'web.account.login']);
+ }
+
+ $service = new AccountService();
+
+ $captcha = $service->getSectionSettings('captcha');
+
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->pick('account/edit_phone');
+ $this->view->setVar('captcha', $captcha);
+ }
+
+ /**
+ * @Get("/email/edit", name="web.account.edit_email")
+ */
+ public function editEmailAction()
+ {
+ if ($this->authUser->id == 0) {
+ $this->response->redirect(['for' => 'web.account.login']);
+ }
+
+ $service = new AccountService();
+
+ $captcha = $service->getSectionSettings('captcha');
+
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->pick('account/edit_email');
+ $this->view->setVar('captcha', $captcha);
+ }
+
/**
* @Post("/password/reset", name="web.account.reset_pwd")
*/
diff --git a/app/Http/Web/Controllers/CourseController.php b/app/Http/Web/Controllers/CourseController.php
index 5e020969..86af553a 100644
--- a/app/Http/Web/Controllers/CourseController.php
+++ b/app/Http/Web/Controllers/CourseController.php
@@ -31,7 +31,6 @@ class CourseController extends Controller
$service = new CourseListService();
$pager = $service->handle();
-
$pager->items = kg_array_object($pager->items);
$service = new CourseQueryService();
@@ -105,7 +104,6 @@ class CourseController extends Controller
$service = new CourseConsultListService();
$pager = $service->handle($id);
-
$pager->items = kg_array_object($pager->items);
$pager->target = $target;
@@ -123,7 +121,6 @@ class CourseController extends Controller
$service = new CourseReviewListService();
$pager = $service->handle($id);
-
$pager->items = kg_array_object($pager->items);
$pager->target = $target;
diff --git a/app/Http/Web/Controllers/MyController.php b/app/Http/Web/Controllers/MyController.php
index dd4a51a5..a681bfab 100644
--- a/app/Http/Web/Controllers/MyController.php
+++ b/app/Http/Web/Controllers/MyController.php
@@ -2,12 +2,12 @@
namespace App\Http\Web\Controllers;
+use App\Services\Frontend\My\AccountInfo as AccountInfoService;
use App\Services\Frontend\My\ConsultList as MyConsultListService;
-use App\Services\Frontend\My\CourseList as MyCourseListService;
-use App\Services\Frontend\My\FavoriteList as MyFavoriteListService;
use App\Services\Frontend\My\OrderList as MyOrderListService;
use App\Services\Frontend\My\RefundList as MyRefundListService;
use App\Services\Frontend\My\ReviewList as MyReviewListService;
+use App\Services\Frontend\My\UserInfo as UserInfoService;
/**
* @RoutePrefix("/my")
@@ -16,27 +16,50 @@ class MyController extends Controller
{
/**
- * @Get("/courses", name="web.my.courses")
+ * @Get("/home", name="web.my.home")
*/
- public function coursesAction()
+ public function homeAction()
{
- $service = new MyCourseListService();
-
- $pager = $service->handle();
-
- $this->view->setVar('pager', $pager);
+ $this->dispatcher->forward([
+ 'for' => 'web.user.show',
+ 'id' => $this->authUser->id,
+ ]);
}
/**
- * @Get("/favorites", name="web.my.favorites")
+ * @Get("/profile", name="web.my.profile")
*/
- public function favoritesAction()
+ public function profileAction()
{
- $service = new MyFavoriteListService();
+ $service = new UserInfoService();
- $pager = $service->handle();
+ $user = $service->handle();
- $this->view->setVar('pager', $pager);
+ $this->view->setVar('user', $user);
+ }
+
+ /**
+ * @Get("/account", name="web.my.account")
+ */
+ public function accountAction()
+ {
+ $service = new AccountInfoService();
+
+ $account = $service->handle();
+
+ $this->view->setVar('account', $account);
+ }
+
+ /**
+ * @Post("/profile/update", name="web.my.update_profile")
+ */
+ public function updateProfileAction()
+ {
+ $service = new UserInfoService();
+
+ $user = $service->handle();
+
+ $this->view->setVar('user', $user);
}
/**
diff --git a/app/Http/Web/Controllers/TeacherController.php b/app/Http/Web/Controllers/TeacherController.php
new file mode 100644
index 00000000..f15ee64e
--- /dev/null
+++ b/app/Http/Web/Controllers/TeacherController.php
@@ -0,0 +1,35 @@
+handle();
+
+ $pager->items = kg_array_object($pager->items);
+
+ $this->view->setVar('pager', $pager);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}", name="web.teacher.show")
+ */
+ public function showAction()
+ {
+
+ }
+
+}
diff --git a/app/Http/Web/Controllers/UserController.php b/app/Http/Web/Controllers/UserController.php
index 36e78f04..d35a4155 100644
--- a/app/Http/Web/Controllers/UserController.php
+++ b/app/Http/Web/Controllers/UserController.php
@@ -3,7 +3,9 @@
namespace App\Http\Web\Controllers;
use App\Services\Frontend\User\CourseList as UserCourseListService;
+use App\Services\Frontend\User\FavoriteList as UserFavoriteListService;
use App\Services\Frontend\User\UserInfo as UserInfoService;
+use Phalcon\Mvc\View;
/**
* @RoutePrefix("/user")
@@ -28,11 +30,50 @@ class UserController extends Controller
*/
public function coursesAction($id)
{
+ $target = $this->request->get('target', 'trim', 'tab-courses');
+
$service = new UserCourseListService();
- $courses = $service->handle($id);
+ $pager = $service->handle($id);
+ $pager->items = kg_array_object($pager->items);
+ $pager->target = $target;
- return $this->jsonSuccess(['courses' => $courses]);
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->setVar('pager', $pager);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/favorites", name="web.user.favorites")
+ */
+ public function favoritesAction($id)
+ {
+ $target = $this->request->get('target', 'trim', 'tab-favorites');
+
+ $service = new UserFavoriteListService();
+
+ $pager = $service->handle($id);
+ $pager->items = kg_array_object($pager->items);
+ $pager->target = $target;
+
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->setVar('pager', $pager);
+ }
+
+ /**
+ * @Get("/{id:[0-9]+}/friends", name="web.user.friends")
+ */
+ public function friendsAction($id)
+ {
+ $target = $this->request->get('target', 'trim', 'tab-friends');
+
+ $service = new UserFavoriteListService();
+
+ $pager = $service->handle($id);
+ $pager->items = kg_array_object($pager->items);
+ $pager->target = $target;
+
+ $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
+ $this->view->setVar('pager', $pager);
}
}
diff --git a/app/Http/Web/Views/account/edit_email.volt b/app/Http/Web/Views/account/edit_email.volt
new file mode 100644
index 00000000..b709387c
--- /dev/null
+++ b/app/Http/Web/Views/account/edit_email.volt
@@ -0,0 +1,43 @@
+{% extends 'templates/content.volt' %}
+
+{% block content %}
+
+
+
+{% endblock %}
+
+{% block include_js %}
+
+ {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
+ {{ js_include('web/js/captcha.verify.js') }}
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/account/edit_password.volt b/app/Http/Web/Views/account/edit_password.volt
new file mode 100644
index 00000000..b709387c
--- /dev/null
+++ b/app/Http/Web/Views/account/edit_password.volt
@@ -0,0 +1,43 @@
+{% extends 'templates/content.volt' %}
+
+{% block content %}
+
+
+
+{% endblock %}
+
+{% block include_js %}
+
+ {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
+ {{ js_include('web/js/captcha.verify.js') }}
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/account/edit_phone.volt b/app/Http/Web/Views/account/edit_phone.volt
new file mode 100644
index 00000000..b709387c
--- /dev/null
+++ b/app/Http/Web/Views/account/edit_phone.volt
@@ -0,0 +1,43 @@
+{% extends 'templates/content.volt' %}
+
+{% block content %}
+
+
+
+{% endblock %}
+
+{% block include_js %}
+
+ {{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
+ {{ js_include('web/js/captcha.verify.js') }}
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/account/forget_password.volt b/app/Http/Web/Views/account/forget_password.volt
index 2d983a98..fe9739e9 100644
--- a/app/Http/Web/Views/account/forget_password.volt
+++ b/app/Http/Web/Views/account/forget_password.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/account/login.volt b/app/Http/Web/Views/account/login.volt
index 40db3a1f..d81f8df8 100644
--- a/app/Http/Web/Views/account/login.volt
+++ b/app/Http/Web/Views/account/login.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/account/register.volt b/app/Http/Web/Views/account/register.volt
index cabcab20..579837d2 100644
--- a/app/Http/Web/Views/account/register.volt
+++ b/app/Http/Web/Views/account/register.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/course/list.volt b/app/Http/Web/Views/course/list.volt
index 47f91205..9700ebd6 100644
--- a/app/Http/Web/Views/course/list.volt
+++ b/app/Http/Web/Views/course/list.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/course/show.volt b/app/Http/Web/Views/course/show.volt
index e7e98d55..5921b95a 100644
--- a/app/Http/Web/Views/course/show.volt
+++ b/app/Http/Web/Views/course/show.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
@@ -25,12 +25,13 @@
{% set show_tab_consults = course.consult_count > 0 ? 1 : 0 %}
{% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %}
-
-
-
- - 详情
- - 目录
- {% if show_tab_packages == 1 %}
+
+
+
+
+ - 详情
+ - 目录
+ {% if show_tab_packages == 1 %}
- 套餐
{% endif %}
{% if show_tab_consults == 1 %}
@@ -60,6 +61,7 @@
{% endif %}
+
diff --git a/app/Http/Web/Views/index/index.volt b/app/Http/Web/Views/index/index.volt
index 8e335819..b22e3cb8 100644
--- a/app/Http/Web/Views/index/index.volt
+++ b/app/Http/Web/Views/index/index.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/my/account.volt b/app/Http/Web/Views/my/account.volt
new file mode 100644
index 00000000..621f8dea
--- /dev/null
+++ b/app/Http/Web/Views/my/account.volt
@@ -0,0 +1,80 @@
+{% extends 'templates/full.volt' %}
+
+{% block content %}
+
+ {% set act_pwd_url = url({'for':'web.account.edit_pwd'}) %}
+ {% set act_phone_url = url({'for':'web.account.edit_phone'}) %}
+ {% set act_email_url = url({'for':'web.account.edit_email'}) %}
+
+
+
+
+
+
账号安全
+
+
+
+
登录密码
+
经常更改密码有助于保护您的帐号安全
+
修改
+
+
+
+
手机绑定
+ {% if account.phone %}
+
已绑定手机:{{ account.phone }}
+
修改
+ {% else %}
+
可用于登录和重置密码
+
绑定
+ {% endif %}
+
+
+
+
邮箱绑定
+ {% if account.phone %}
+
已绑定邮箱:{{ account.email }}
+
修改
+ {% else %}
+
可用于登录和重置密码
+
绑定
+ {% endif %}
+
+
+
+
+
+
+{% endblock %}
+
+{% block inline_js %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/my/menu.volt b/app/Http/Web/Views/my/menu.volt
new file mode 100644
index 00000000..b65a2d3f
--- /dev/null
+++ b/app/Http/Web/Views/my/menu.volt
@@ -0,0 +1,25 @@
+{%- macro vip_info(user) %}
+ {% set vip_url = '#' %}
+ {% if user.vip == 1 %}
+
会员
+ {% else %}
+
会员
+ {% endif %}
+{%- endmacro %}
+
+
+
+

+
+
{{ auth_user.name }} {{ vip_info(auth_user) }}
+
+
+
\ No newline at end of file
diff --git a/app/Http/Web/Views/my/profile.volt b/app/Http/Web/Views/my/profile.volt
new file mode 100644
index 00000000..5774f822
--- /dev/null
+++ b/app/Http/Web/Views/my/profile.volt
@@ -0,0 +1,45 @@
+{% extends 'templates/full.volt' %}
+
+{% block content %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/order/confirm.volt b/app/Http/Web/Views/order/confirm.volt
index f4d95e08..241ba365 100644
--- a/app/Http/Web/Views/order/confirm.volt
+++ b/app/Http/Web/Views/order/confirm.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/order/pay.volt b/app/Http/Web/Views/order/pay.volt
index 866501a8..d5083133 100644
--- a/app/Http/Web/Views/order/pay.volt
+++ b/app/Http/Web/Views/order/pay.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
diff --git a/app/Http/Web/Views/partials/header.volt b/app/Http/Web/Views/partials/header.volt
index 48d2b734..f61a9490 100644
--- a/app/Http/Web/Views/partials/header.volt
+++ b/app/Http/Web/Views/partials/header.volt
@@ -30,15 +30,12 @@
{% if auth_user.id > 0 %}
- - 消息
+ - 消息
-
{{ auth_user.name }}
- - 我的课程
- - 我的收藏
- - 我的咨询
- - 我的订单
- - 个人设置
+ - 我的主页
+ - 个人设置
- 退出登录
diff --git a/app/Http/Web/Views/partials/macro_course.volt b/app/Http/Web/Views/partials/macro_course.volt
index 700c9595..42644550 100644
--- a/app/Http/Web/Views/partials/macro_course.volt
+++ b/app/Http/Web/Views/partials/macro_course.volt
@@ -70,4 +70,25 @@
+{%- endmacro %}
+
+{%- macro learning_course_card(item) %}
+ {% set course_title = item.course.title|e %}
+ {% set course_url = url({'for':'web.course.show','id':item.course.id}) %}
+
+
+
+
+
已学习 {{ item.duration|total_duration }}
+
{%- endmacro %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/search/list.volt b/app/Http/Web/Views/search/list.volt
index a42edf18..e4853223 100644
--- a/app/Http/Web/Views/search/list.volt
+++ b/app/Http/Web/Views/search/list.volt
@@ -1,4 +1,4 @@
-{% extends 'templates/base.volt' %}
+{% extends 'templates/full.volt' %}
{% block content %}
@@ -14,16 +14,18 @@
-
+
{% if pager.total_pages > 0 %}
- {% if type == 'course' %}
- {{ partial('search/content_course') }}
- {% elseif type == 'other' %}
- {{ partial('search/content_other') }}
- {% endif %}
+
+ {% if type == 'course' %}
+ {{ partial('search/content_course') }}
+ {% elseif type == 'other' %}
+ {{ partial('search/content_other') }}
+ {% endif %}
+
{{ partial('partials/pager') }}
{% else %}
-
+
没有找到{{ query }}相关内容,换个关键字试试吧!
diff --git a/app/Http/Web/Views/teacher/list.volt b/app/Http/Web/Views/teacher/list.volt
new file mode 100644
index 00000000..2e839b83
--- /dev/null
+++ b/app/Http/Web/Views/teacher/list.volt
@@ -0,0 +1,27 @@
+{% extends 'templates/full.volt' %}
+
+{% block content %}
+
+
+
+ {% if pager.total_pages > 0 %}
+
+ {% for item in pager.items %}
+ {% set teacher_title = item.title ? item.title : '小小教书匠' %}
+ {% set teacher_url = url({'for':'web.teacher.show','id':item.id}) %}
+
+
+

+
+
+
{{ teacher_title }}
+
+ {% endfor %}
+
+ {{ partial('partials/pager') }}
+ {% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/templates/content.volt b/app/Http/Web/Views/templates/content.volt
new file mode 100644
index 00000000..3b0258b7
--- /dev/null
+++ b/app/Http/Web/Views/templates/content.volt
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
{{ site_seo.getTitle() }}
+ {{ icon_link('favicon.ico') }}
+ {{ css_link('lib/layui/css/layui.css') }}
+ {{ css_link('web/css/common.css') }}
+ {% block link_css %}{% endblock %}
+ {% block inline_css %}{% endblock %}
+
+
+
+ {% block content %}{% endblock %}
+
+{{ js_include('lib/layui/layui.all.js') }}
+{{ js_include('web/js/common.js') }}
+{% block include_js %}{% endblock %}
+{% block inline_js %}{% endblock %}
+
+
\ No newline at end of file
diff --git a/app/Http/Web/Views/templates/base.volt b/app/Http/Web/Views/templates/full.volt
similarity index 98%
rename from app/Http/Web/Views/templates/base.volt
rename to app/Http/Web/Views/templates/full.volt
index 5ef00a1e..7bacdd95 100644
--- a/app/Http/Web/Views/templates/base.volt
+++ b/app/Http/Web/Views/templates/full.volt
@@ -14,25 +14,18 @@
{% block inline_css %}{% endblock %}
-
-
{% block content %}{% endblock %}
-
-
{{ js_include('lib/layui/layui.all.js') }}
{{ js_include('web/js/common.js') }}
-
{% block include_js %}{% endblock %}
-
{% block inline_js %}{% endblock %}
-