Bladeren bron

详情页不再分页;详情页的seotitle和h1 title区分开

guoziyun 1 jaar geleden
bovenliggende
commit
9517c8a7e8
4 gewijzigde bestanden met toevoegingen van 69 en 55 verwijderingen
  1. 27 14
      routes/index.js
  2. 5 5
      service/cron-jobs/fetch-meta.js
  3. 1 0
      sync/sync-service.js
  4. 36 36
      views/detail.ejs

+ 27 - 14
routes/index.js

@@ -18,7 +18,7 @@ const CACHE_PREFIX = "art_v1";
 // const CACHE_EXPIRES = 60; // 60s刷新一次
 const CACHE_EXPIRES = 3600; // 1小时刷新一次即可
 
-const artSelect = 'name title desc copy width height date publishTime tags lastMod mystery hasSpecial useSpecialThumb publishVersion lock pageId';
+const artSelect = 'name title desc seoTitle seoDescription width height date publishTime tags lastMod mystery hasSpecial useSpecialThumb publishVersion lock pageId';
 
 
 // 路由:设置语言
@@ -1171,9 +1171,11 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
       organizeDetail(doc, lang, imageType);
 
       // find relate
-      let tags = [...doc.tags];
+      let mytags = [...doc.tags];
       let cates = categories.map(e => e.id);
-      tags = tags.filter(e => !cates.includes(e));
+      let alltags = tags.map(e => e.tag);
+      mytags = mytags.filter(e => !cates.includes(e) && alltags.includes(e));
+      if (mytags.length == 0) mytags = [...doc.tags];
 
       let query = {
         page: req.query.page,
@@ -1182,7 +1184,7 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
         orderBy: 'publishTime',
         order: 'desc',
         base: { open: true, status: 9000 },
-        filters: { tags },
+        filters: { tags: mytags },
       }
 
       let result = await getListBuilder(query, models.Art);
@@ -1190,8 +1192,8 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
 
 
       let data = {
-        title: `${doc.title}`,
-        description: `${doc.desc}`,
+        title: `${doc.seoTitle}`,
+        description: `${doc.seoDescription}`,
         detail: doc,
         data: result.data,
         page: result.page,
@@ -1261,9 +1263,11 @@ router.get('/:lang/detail/:id', function (req, res, next) {
       organizeDetail(doc, lang, imageType);
 
       // find relate
-      let tags = [...doc.tags];
+      let mytags = [...doc.tags];
       let cates = categories.map(e => e.id);
-      tags = tags.filter(e => !cates.includes(e));
+      let alltags = tags.map(e => e.tag);
+      mytags = mytags.filter(e => !cates.includes(e) && alltags.includes(e));
+      if (mytags.length == 0) mytags = [...doc.tags];
 
       let query = {
         page: req.query.page,
@@ -1272,15 +1276,15 @@ router.get('/:lang/detail/:id', function (req, res, next) {
         orderBy: 'publishTime',
         order: 'desc',
         base: { open: true, status: 9000 },
-        filters: { tags },
+        filters: { tags: mytags },
       }
 
       let result = await getListBuilder(query, models.Art);
       organizeData(result.data, lang, imageType);
 
       let data = {
-        title: `${doc.title}`,
-        description: `${doc.desc}`,
+        title: `${doc.seoTitle}`,
+        description: `${doc.seoDescription}`,
         data: doc,
         translate,
         lang,
@@ -1477,14 +1481,23 @@ const organizeDetail = (doc, lang, imageType) => {
       console.error(e.message);
     }
   }
-  if (doc.copy) {
+  if (doc.seoTitle) {
     try {
-      let copyJson = JSON.parse(doc.copy);
-      doc.copy = copyJson && copyJson[lang] ? copyJson[lang] : '';
+      let seoTitleJson = JSON.parse(doc.seoTitle);
+      doc.seoTitle = seoTitleJson && seoTitleJson[lang] ? seoTitleJson[lang] : '';
     } catch (e) {
       console.error(e.message);
     }
   }
+  if (doc.seoDescription) {
+    try {
+      let seoDescriptionJson = JSON.parse(doc.seoDescription);
+      doc.seoDescription = seoDescriptionJson && seoDescriptionJson[lang] ? seoDescriptionJson[lang] : '';
+    } catch (e) {
+      console.error(e.message);
+    }
+  }
+
   doc.publishTime = format(new Date(doc.publishTime), 'yyyy-MM-dd');
 
   doc.tags = doc.tags.filter(str => !/[\u4e00-\u9fa5]/.test(str)); // 过滤掉tags中的中文

+ 5 - 5
service/cron-jobs/fetch-meta.js

@@ -137,7 +137,7 @@ async function runVideoStoryMeta() {
   let hour, minute, second;
   let start = Date.now();
 
-  // 筛选出所有album
+  // 筛选出所有videostory
   let query = { enabled: true, $or: [{ seoTitle: { $exists: false } }, { seoTitle: null }] }
   let docs = await models.ArtVideoStory
     .find(query)
@@ -224,10 +224,10 @@ async function runArtMeta() {
       let desc = JSON.stringify(descJson);
       let copy = JSON.stringify(copyJson);
 
-      doc.title = seotitle;
-      doc.subtitle = title;
-      doc.desc = desc;
-      doc.copy = copy;
+      doc.seoTitle = seotitle;
+      doc.seoDescription = desc;
+      doc.title = title;
+      doc.desc = copy;
       await doc.save();
 
     } catch (e) {

+ 1 - 0
sync/sync-service.js

@@ -76,6 +76,7 @@ async function run() {
               remotedoc.title = localdoc.title;
               remotedoc.desc = localdoc.desc;
               remotedoc.copy = localdoc.copy;
+              remotedoc.subtitle = localdoc.subtitle;
             } else if (eventDoc.tb == 'albums' || eventDoc.tb == 'videostories') { // albums 和 videostories 表需保留新增的seoTitle,seoDescription字段,避免覆盖
               remotedoc.seoTitle = localdoc.seoTitle;
               remotedoc.seoDescription = localdoc.seoDescription;

+ 36 - 36
views/detail.ejs

@@ -112,46 +112,46 @@
             </div>
         </div>
 
-        <%- include('pagination') %>
+        <!-- <%- include('pagination') %> -->
 
 
-            <script>
-                // document.getElementById('downloadBtn').addEventListener('click', function () {
-                //     var link = document.createElement('a');
-                //     link.style.display = 'none';
-                //     link.href = '<%= detail.downlink %>';
-                //     link.download = '<%= detail._id %>.jpeg';
-                //     document.body.appendChild(link);
-                //     link.click();
-                //     document.body.removeChild(link);
-                // });
+        <script>
+            // document.getElementById('downloadBtn').addEventListener('click', function () {
+            //     var link = document.createElement('a');
+            //     link.style.display = 'none';
+            //     link.href = '<%= detail.downlink %>';
+            //     link.download = '<%= detail._id %>.jpeg';
+            //     document.body.appendChild(link);
+            //     link.click();
+            //     document.body.removeChild(link);
+            // });
 
-                document.getElementById('downloadBtn').addEventListener('click', function () {
-                    const imageUrl = '<%= detail.downlink %>';
-                    fetch(imageUrl)
-                        .then(response => {
-                            if (!response.ok) {
-                                throw new Error('Network response was not ok');
-                            }
-                            return response.blob();
-                        })
-                        .then(blob => {
-                            const url = URL.createObjectURL(blob);
-                            const a = document.createElement('a');
-                            a.style.display = 'none';
-                            a.href = url;
-                            a.download = '<%= detail._id %>.webp';
-                            document.body.appendChild(a);
-                            a.click();
-                            URL.revokeObjectURL(url);
-                            document.body.removeChild(a);
-                        })
-                        .catch(error => {
-                            console.error('Image Download Error:', error);
-                        });
-                });
+            document.getElementById('downloadBtn').addEventListener('click', function () {
+                const imageUrl = '<%= detail.downlink %>';
+                fetch(imageUrl)
+                    .then(response => {
+                        if (!response.ok) {
+                            throw new Error('Network response was not ok');
+                        }
+                        return response.blob();
+                    })
+                    .then(blob => {
+                        const url = URL.createObjectURL(blob);
+                        const a = document.createElement('a');
+                        a.style.display = 'none';
+                        a.href = url;
+                        a.download = '<%= detail._id %>.webp';
+                        document.body.appendChild(a);
+                        a.click();
+                        URL.revokeObjectURL(url);
+                        document.body.removeChild(a);
+                    })
+                    .catch(error => {
+                        console.error('Image Download Error:', error);
+                    });
+            });
 
-            </script>
+        </script>
 </body>
 
 </html>