2022年3月2日 星期三

SC 欄位效果:sc_input_group

有趣的文章內容,參考:

https://medium.com/scriptcase-master/bootstrap-input-group-in-scriptcase-mastertip09-a20a9a7dca5


1. 我將 sc_input_group(),寫到 internal libraries 裡面,這樣可以共用。

2. 記得使用時,需要先將 ajax_error_output 設成 OFF ,在 application -> Setting 裡面

3. 如果是在 Form 的單一Record 時,在 Event onLoad 裡面,設:

$arr_fields = [

['login'    , 'text', 'R$', 'right'],

['email', 'text', '@gmail.com', 'right'],

['nick_name'    , 'icon', 'fas fa-at', 'right']

];

sc_input_group($arr_fields,null);

如果是 multi records From ,在 EVENT onLoadRecord


# Form with multiple lines example

$arr_fields = [

['field_name', 'text', 'R$', 'right'],

['field_name', 'text', '@gmail.com', 'right'],

['field_name', 'icon', 'fas fa-at', 'right'],

['field_name', 'icon', 'fas fa-phone', 'right'],

['field_name', 'icon', 'fas fa-phone', 'right']

];

sc_input_group($arr_fields, $sc_seq_vert);



2022年3月1日 星期二

ERROR: CONSTANT DS ALREADY DEFINED

Constant 重複定義了! 

找到這個指令:

define('DS', DIRECTORY_SEPARATOR);

修改成這樣就可以了:

if(!defined('DS')){ define('DS',DIRECTORY_SEPARATOR); }

MySQL sql_mode=only_full_group_by

MySQL 產生 sql_mode=only_full_group_by

這是我做一個 View 裡面有 GROUP BY

在我的 Local MySQL沒有問題,上傳到  Server 就有問題了。

這一定就是版本不同的緣故。

於是網路搜尋:

https://www.gushiciku.cn/pl/pFxA/zh-tw

https://www.twle.cn/c/yufei/mysqlfav/mysqlfav-basic-sql_mode2.html

修改了 Server 上面 /etc/my.cnf

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

加上這段,重新啟動MySQL 就好了!

2022年1月15日 星期六

在 Centos 上安裝 Ghostscript ,這是 使用 PDF要用到的。

GhostScript:

https://www.ghostscript.com/index.html

下載:

https://www.ghostscript.com/releases/gsdnld.html

安裝:

在SSH終端上:

cd /usr/src

wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9550/ghostscript-9.55.0.tar.gz

tar -xzvf ghostscript-9.55.0.tar.gz

cd ghostscript-9.55.0

./configure 

make

make install


在 使用 Imagick,使用 PDF 轉換 JPG,一直發生 Internal Error 500

經查了很久,才知道,Server必須安裝 PHP Imagick 以外,還有 GhostScript,這是一個 PDF 要用的免費程式。

我的主機上沒有,所以必須安裝起來。





在 PDF Report 裡面的  PDF Layout Code下面增加產生  PDF,轉 JPG 的程式

因為,我們不知道 SC產生的 PDF 檔案名稱,只好自己用自訂的PDF檔名來產生

然後,再由自己產生的 PDF 產生 JPG

$t_pdf_file = $_SERVER['DOCUMENT_ROOT']."/_lib/tmp/id_".{pay_form_id}."_pay_form.pdf";

$t_jpg_file = $_SERVER['DOCUMENT_ROOT']."/_lib/tmp/id_".{pay_form_id}."_pay_form.jpg";

$pdf->output($t_pdf_file,"F");

$im = new Imagick();

$im->setResolution(150, 150);

$im->readImage( $t_pdf_file );

$im->writeImages( $t_jpg_file, false );




** 還有 /domains/<websitename>.com/public_html/_lib/prod/third/wkhtmltopdf/linux-amd64/wkhtmltopdf-amd64 權限要設成 "777"




2022年1月11日 星期二

ScriptCase PDF 字型

 Scriptcase 的 PDF,如果使用預設字型,也就是在 PDF Application 的設定裡font 沒有設定字型,那麼,產生出來的結果,我的情形是在電腦上可以出現中文字型,但是在手機上,就沒有中文字型!

後來,試了很久,在 PDF Application 的設定裡字型改為其他字型,結果是中文字亂碼,試了幾個,以下是中文可以出現的:

  • kozminproregular
  • cid0jp
  • cid0ct
  • cid0kr
  • kozgopromedium
PDF的字型,是抓取機器上的字型,如果有特殊字型,需內嵌在PDF檔案裏面。
猜想,前面沒有設定字型,可能就是因為預設的字型,在手機上沒有,所以出現空白。
設定好字型以後,可能就內嵌在PDF檔案裡面了,可以正常顯示。

PDF手機字型顯示問題解決了!



2022年1月9日 星期日

ScriptCase 的 Application Field Type 是 Label / Text 使用

 ScriptCase 裡面的 Field Type

如果是設定為 Label,在 程式中,無法參照到值

必須設定為 Text,而底下的屬性設為 Label Field - Cannot be changed. 這樣程式才可以參照到值。


例如:一個 Control Application

兩個欄位:

{user}、{id}

如果 {id} 為  Label,則在程式中,{id}出來的是null

必須設 {id} 為 TEXT,底下的屬性設為 Label Field,這樣在程式中,{id}就可以抓到值了。

2021年12月4日 星期六

ScriptCase的多語系處理

 ScriptCase的多語系:

1. 定義在 _lib/lang/ xxx.lang.php 裡面

現在現有的是: 

zh_cn.lang.php 簡體

zh_hk.lang.php 繁體

顯然,NetMake公司也搞不大清楚,中文語系的情況,所以,把香港的當成繁體的代表。

我試著自己增加一個 zh_tw.lang.php 還可以用。


關於語系的問題,有 language 以及 regional 兩個部分

language 是關於文字本身的

regional 是關於區域的一些用法,例如:日期、時間、星期、月等表示方式。

台灣習慣使用 yyyy-mm-dd

其他地區也許習慣 dd-mm-yyyy

所以,需要這項設定。這在Windows 裡面也有。

因此,再設定的時候,會有:



/*idioma*/

$idioma = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);

switch($idioma){

case 'pt': //Caso seja português

sc_set_language('pt_br');

sc_set_regional('pt_br');

break;

case 'es': //Caso seja espanhol

sc_set_language('es');

sc_set_regional('es_es');

break;

case 'zh_hk': //

sc_set_language('zh_hk');

sc_set_regional('zh_tw');

break;

default:

sc_set_language('en_us');

sc_set_regional('en_us');

break;

}

以下這是在 login.php 中,使用 $_GET['lang']連結的方式,選擇何種語系的方式:

寫在: Events->onApplicationInit 或 onScriptInit

if(isset($_GET['lang']) && !empty($_GET['lang']))

{

switch($_GET['lang']){

case 'pt': //Caso seja português

sc_set_language('pt_br');

sc_set_regional('pt_br');

break;

case 'es': //Caso seja espanhol

sc_set_language('es');

sc_set_regional('es_es');

break;

case 'zh_hk': //

sc_set_language('zh_hk');

sc_set_regional('zh_tw');

break;

case 'zh_tw': //

sc_set_language('zh_tw');

sc_set_regional('zh_tw');

break;

default:

sc_set_language('en_us');

sc_set_regional('en_us');

break;

}

}



如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。