Browse Source

Merge pull request #2114 from visuddhinanda/laravel

add 导出术语表
visuddhinanda 1 year ago
parent
commit
8e67ac5e8f

+ 41 - 3
app/Console/Commands/ExportChapter.php

@@ -24,8 +24,8 @@ class ExportChapter extends Command
     /**
      * The name and signature of the console command.
      * php artisan export:chapter 213 3 a19eaf75-c63f-4b84-8125-1bce18311e23 213-3.html --format=html --origin=true
-     * php artisan export:chapter 168 915 19f53a65-81db-4b7d-8144-ac33f1217d34 168-915.html --format=html
-     * php artisan export:chapter 168 915 19f53a65-81db-4b7d-8144-ac33f1217d34 168-915.html --format=html --origin=true
+     * php artisan export:chapter 168 915 7fea264d-7a26-40f8-bef7-bc95102760fb 168-915.html --format=html --debug
+     * php artisan export:chapter 168 915 7fea264d-7a26-40f8-bef7-bc95102760fb 168-915.html --format=html --origin=true
      * @var string
      */
     protected $signature = 'export:chapter {book} {para} {channel} {query_id} {--token=} {--origin=false} {--translation=true} {--debug} {--format=tex} ';
@@ -280,9 +280,47 @@ class ExportChapter extends Command
                 ];
         }
 
+        //导出术语表
+        $keyPali = array();
+        $keyMeaning = array();
+        if(isset($GLOBALS['glossary'])){
+            $glossary = $GLOBALS['glossary'];
+            foreach ($glossary as $word => $meaning) {
+                $keyMeaning[$meaning] = $word;
+                $keyPali[$word] = $meaning;
+            }
+        }
+
+        ksort($keyPali);
+        krsort($keyMeaning);
+        $glossaryData = [];
+        $glossaryData['pali'] = [];
+        $glossaryData['meaning'] = [];
+        foreach ($keyPali as $word => $meaning) {
+            $glossaryData['pali'][] = ['pali'=>$word,'meaning'=>$meaning];
+        }
+        foreach ($keyMeaning as $meaning => $word) {
+            $glossaryData['meaning'][] = ['pali' => $word,'meaning'=>$meaning];
+        }
+
+        Log::debug('glossary',['data' => $glossaryData]);
+
+        $tplFile = resource_path("mustache/chapter/".$this->option('format')."/glossary.".$this->option('format'));
+        $tplGlossary = file_get_contents($tplFile);
+
+        $glossaryContent = $m->render($tplGlossary,$glossaryData);
+
+        $sections[] = [
+            'name'=>'glossary.'.$this->option('format'),
+            'body'=>[
+                'title' => 'glossary',
+                'content' => $glossaryContent
+            ]
+        ];
+
         $this->info($upload->setStatus(0.9,'export content done'));
 
-        Log::debug('导出结束');
+        Log::debug('导出结束',['sections'=>count($sections)]);
 
         $upload->upload('chapter',$sections,$bookMeta);
         $this->info($upload->setStatus(1,'export chapter done'));

+ 7 - 0
app/Http/Api/TemplateRender.php

@@ -46,6 +46,7 @@ class TemplateRender{
         $this->format = $format;
         $this->studioId = $studioId;
         $this->debug = $debug;
+        $this->glossaryKey = 'glossary';
 
         if(count($this->channel_id)>0){
             $channelId = $this->channel_id[0];
@@ -58,6 +59,9 @@ class TemplateRender{
             $this->langFamily = explode('-',$lang)[0];
         }
     }
+    public function glossaryKey(){
+        return $this->glossaryKey;
+    }
     /**
      * TODO 设置默认语言。在渲染某些内容的时候需要语言信息
      */
@@ -285,8 +289,11 @@ class TemplateRender{
                 break;
             case 'html':
                 if(isset($props["meaning"])){
+                    $GLOBALS[$this->glossaryKey][$props["word"]] = $props['meaning'];
+
                     $key = 'term-'.$props["word"];
                     $termHead = "<a href='#'>".$props['meaning']."</a>";
+
                     if(isset($GLOBALS[$key])){
                         $output = $termHead;
                     }else{

+ 15 - 10
app/Tools/ExportDownload.php

@@ -86,16 +86,18 @@ class ExportDownload
         $tplFile = resource_path("mustache/".$type.'/'.$this->format."/main.".$this->format);
         $tpl = file_get_contents($tplFile);
         $texContent = $m->render($tpl,$bookMeta);
-        $tex[] = ['name'=>'main.'.$this->format,
-                  'content'=>$texContent
-                 ];
+        $tex[] = [
+            'name' => 'main.'.$this->format,
+            'content' => $texContent
+            ];
         foreach ($sections as $key => $section) {
             $tplFile = resource_path("mustache/".$type.'/'.$this->format."/section.".$this->format);
             $tpl = file_get_contents($tplFile);
             $texContent = $m->render($tpl,$section['body']);
-            $tex[] = ['name'=>$section['name'],
-                  'content'=>$texContent
-                 ];
+            $tex[] = [
+                'name'=>$section['name'],
+                'content'=>$texContent
+                ];
         }
 
         Log::debug('footnote start');
@@ -107,14 +109,17 @@ class ExportDownload
             file_exists($tplFile)){
             $tpl = file_get_contents($tplFile);
             $texContent = $m->render($tpl,['footnote'=>$GLOBALS['note']]);
-            $tex[] = ['name'=>'footnote.'.$this->format,
-                        'content'=>$texContent
-                        ];
+            $tex[] = [
+                'name'=>'footnote.'.$this->format,
+                'content'=>$texContent
+                ];
         }
         if($this->debug){
             $dir = "export/{$type}/".$this->format."/".$this->zipFilename."/";
+            $filename = $dir.$section['name'];
+            Log::debug('save',['filename'=>$filename]);
             foreach ($tex as $key => $section) {
-                Storage::disk('local')->put($dir.$section['name'], $section['content']);
+                Storage::disk('local')->put($filename, $section['content']);
             }
         }
 

+ 8 - 2
resources/mustache/chapter/html/glossary.html

@@ -1,9 +1,15 @@
 <h2>glossary</h2>
 <div class="glossary">
+<h3>Sort by Pali</h3>
+<table>
 [[#pali]]
-<div class="item pali"><span class="head">[[pali]]</span><span class="content">[[meaning]]</span></div>
+<tr class="item pali"><td class="head">[[pali]]</td><td class="content">[[meaning]]</td></tr>
 [[/pali]]
+</table>
+<h3>Sort by Translation</h3>
+<table>
 [[#meaning]]
-<div class="item meaning"><span class="head">[[meaning]]</span><span  class="content">[[pali]]</span></div>
+<tr class="item meaning"><td class="head">[[meaning]]</td><td  class="content">[[pali]]</td></tr>
 [[/meaning]]
+</table>
 </div>