English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Arquitectura del programa cms
Este programa es principalmente utilizado para el desarrollo de sitios web empresariales, también puede ser un programa de blog, el programa se mejora a partir de un programa de blog .net anterior, la tecnología principal se ha cambiado de webform a .net mvc, debido a que es un proyecto muy antiguo,12Año o mvc3Versión, por supuesto, también se ejecuta bajo linux.
Pila técnica .net framework 4.0 base de datos sqlite, entorno de ejecución mono linux, biblioteca sqlite bajo mono, motor de plantillas razor, framework orm ligero dapper, vs2017 Versión de comunidad
Esta vez, las herramientas de desarrollo son bastante nuevas, la vez anterior usé vs2010Lanzado, con un gran margen, este proyecto también estaba en10Desarrollado a continuación, aunque se usa2017En realidad, no tiene mucho impacto.
El motor razor es mucho más fácil de usar que nvelocity, y se integra bien con el backend.
Y este proyecto utiliza completamente dapper orm, la operación de acceso a la base de datos también se ve mucho más clara.
Estructura del código
La izquierda se divide principalmente en tres carpetas, Jqpress.web almacena las entradas de enrutamiento web, las plantillas de skin, los archivos estáticos, la carpeta de carga y el programa de administración del backend se realiza a través de la gestión de dominios Areas, la estructura del proyecto es bastante clara.
路由设计
路由入口为HomeController这个文件,包括首页、产品列表,文章列表,文章内容等待,都是通过这个Controller来路由的,虽然功能比较多,但是代码量不到300行,业务逻辑处理基本都在service层。
如下为一个列表界面的Action逻辑才20几行
public ActionResult Category(string pagename) { var model = new PostListModel(); CategoryInfo cate = _categoryService.GetCategory(pagename); model.Category = cate; if (cate != null) { int categoryId = cate.CategoryId; model.MetaKeywords = cate.CateName; model.MetaDescription = cate.Description; ViewBag.Title = cate.CateName; model.Url = ConfigHelper.SiteUrl + "category/" + Jqpress.Framework.Utils.StringHelper.SqlEncode(pagename) + "/page/{0}"; const int pageSize = 10; int count = 0; int pageIndex = PressRequest.GetInt("page", 1); int cateid = PressRequest.GetQueryInt("cateid", -1); int tagid = PressRequest.GetQueryInt("tagid", -1); if (cateid > 0) pageIndex = pageIndex + 1; var cateids = categoryId+"+ _categoryService.GetCategoryList().FindAll(c => c.ParentId == categoryId).Aggregate(string.Empty, (current, t) => current + (t.CategoryId + ", var postlist = _postService.GetPostPageList(pageSize, pageIndex, out count, cateids.TrimEnd(','), tagid, -1, -1, -1, -1, -1,-1, "", "", "); model.PageList.LoadPagedList(postlist); model.PostList = (List<PostInfo>)postlist; } model.IsDefault = 0; return View(model.Category.ViewName, model); }
Diseño del motor de plantillas
El motor de plantillas utiliza razor, las plantillas de estilo de cms diferentes se almacenan en la carpeta Themes en forma de carpeta, se puede cambiar libremente entre plantillas a través de la configuración del backend (esta función aún se está mejorando).
Diseño de almacenamiento de datos
Como cms ligero, naturalmente no se utiliza mysql o sqlserver, sigue utilizando sqlite, lo anterior es la operación de base de datos a través de dapper, aunque no es tan poderoso como el orm agregado por Microsoft, la legibilidad y la manipulación son muy buenas.
Debido a que se debe soportar Linux, las clases de operaciones de sqlite necesitan usar Mono.Data.Sqlite;
Por supuesto, se puede cambiar a Windows, el método de cambio que escribí anteriormente es demasiado brusco, los estudiantes que han estudiado patrones de diseño deberían poderlo refactorear en cuestión de minutos, cambiar entre Windows y Linux es muy conveniente.
Estructura de la base de datos
jq_category Tabla de clasificación y etiquetas jq_comments Tabla de comentarios jq_links Configuración de enlaces amistosos y navegación jq_posts Tabla de artículos jq_sites Estadísticas de acceso al sitio y estadísticas de artículos, clasificación y cantidad jq_users Tabla de cuentas
La estructura de la base de datos no difiere de la del programa de blog anterior, solo hay diferencias en la estructura de algunas tablas.
Ejecutar vs2017Vista previa en modo de depuración
Página principal de cms
Inicio de sesión en la administración, nombre de usuario predeterminado admin, contraseña123456
Página principal de administración
Lista de artículos
Edición de artículos
Método de despliegue en Linux mono
La imagen superior muestra la información de instalación de mono en mi servidor.
jexus
En Linux, es necesario instalar mono y jexus para que funcione, mono como entorno de ejecución de .NET Framework para Linux, jexus como servidor web.
Configuración de jexus, ya que tengo otros sitios web de lenguajes en mi servidor, no he adoptado jexus para servicios externos directamente.
nginx
Nginx actúa como proxy para jexus81Puerto, este campo no es obligatorio, pero Nginx, como software de proxy común, puede ejecutarse en el servidor .net, php, java, etc., cada uno en su lugar, floreciendo en todas partes.
Descripción del directorio bin
.net mvc3Al desplegar en linux, se debe tener en cuenta que todos los dll que se引用 en el proyecto deben subirse al directorio bin. Además, es necesario subir Microsoft.web.Infrastructure.dll, que se necesita para publicar proyectos mvc. Puede comparar con mi programa de blog de Linux en webform, en el sitio web bin solo se necesitan incluir Mono y Nvelocity2Un dll de terceros, el resto son programas de negocios propios, este .net cms requiere mucho, como se muestra en la imagen, es el contenido del directorio bin de mi sitio de blog.
Problemas de programas .net en el servidor linux, jexus no admite caracteres chinos, por lo que la ruta de subida de archivos debe rewritten en forma de letras y números, jexus es un servidor web que por defecto es sensible a mayúsculas y minúsculas, por lo que es necesario prestar atención al desplegarlo.
Sólo hay que quitar el '#' delante de la frase 'export MONO_IOMAP=...' en el archivo de script jws para que no se distinga entre mayúsculas y minúsculas. Obteniendo el código fuente
https://github.com/robotbird/jqpress.cms
Para evitar que algunos estudiantes no puedan acceder a Github, hemos colocado el gitee de oschina.
https://gitee.com/robotbird/jqpress.cms
Esto es todo el contenido que hemos recopilado para ustedes, esperamos que les sea útil. Si tienen alguna pregunta, pueden discutirla en la sección de comentarios a continuación. Gracias por su apoyo a la tutorial de gritos.