2023年9月23日 星期六

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

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。

如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。

以上。

2023年9月11日 星期一

MySQL 裡面,數字與字串做是否相等的判斷

 


如果 2308 與 '2308',一個是數字,一個是字串,這兩個相比較,是否相等?

測試結果是:在mysql 裡面,是相等的。

2023年9月1日 星期五

ER-Model identifying relationships 與 non-identifying relationships的差別

https://www.geeksforgeeks.org/difference-between-identifying-and-non-identifying-relationships/

https://matthung0807.blogspot.com/2018/03/er-model-identifying-relationships-non.html


結論:簡單說:

實的關聯 (identifying relationships):一個是母表 vs 子表,外部關聯鍵 foreign key的值,是不能為NULL,一定要有值!

虛的關聯 (non-identifying relationships):foreign key 可以為 NULL

2023年8月27日 星期日

發現很好的SC sniplets 參考網站 https://asdw.de/en/category/scriptcase-sniplets-en/

https://asdw.de/en/category/scriptcase-sniplets-en/


今天紀錄一篇:

一、如何將[儲存]按鈕,複製一個放在 FORM 的任何位置。

https://asdw.de/en/add-new-save-button-anywhere-on-scriptcase-form/

1. 建立一個 Label 的新欄位{save_it},然後將他放在自己希望的位置。

2. 在 OnLoad Event 中,寫上下面這段程式碼:

{save_it} = '<a href="javascript: nm_atualiza (\'alterar\');" id="sc_b_upd_t" onclick="nm_atualiza (\'alterar\');; return false;" class="scButton_default" title="Update record" style="vertical-align: middle; display:inline-block;">Click to save</a>';


這樣就好了。


二、Place Button at any place of Scriptcase Form / Grid

https://asdw.de/en/place-button-at-any-place-of-scriptcase-form-grid/
要在FORM/GRID 的上面、下面 TOOLBAR 的位置,建立一個按鈕,是很簡單的事情。
但有時候,我們會希望將按鈕放在 FORM 裡面 / GRID的 ROW 裡面。
怎麼做?

1. 建立一個 動作的 LINK(如果點擊這個按鈕)

最簡單的方法是,用 SC 的 Macro:

sc_make_link(Application, Parameters)

example:

$string_link = sc_make_link(grid_images, ref_object_type='contact';ref_object_id={id});


2. 建立一個 Label 欄位

例如:名稱為: {edit_picture}

3. 在 OnLoad Event 中設定值給該欄位:

{edit_pictures} = '<a href="' . $string_link . '" class="scButton_small" title="Edit the picture" style="vertical-align: middle; display:inline-block;">' . {lang_contact_edit_pictures} . '</a>';


三、Save the data of a Scriptcase form via Ajax Event or PHP

https://asdw.de/en/save-the-data-of-a-scriptcase-form-via-ajax-event-or-php/


有時候,需要儲存紀錄,而不要讓用戶去按儲存或加入等按鈕。怎麼辦?

1. 建立一個小小的 Javascript Method 在 SC 的FORM:

Programming > Javascript Methods > New Method

The name of that method in our sample is:  ‘speichere’

The code of the method is only one line:

nm_atualiza ('alterar');


2. 設定使用者執行儲存的情境,例如用戶離開某一個欄位:

To save the content use the Ajax-event OnBlur or OnChange.

Sample: Save the data of the form when the user exits the field CityName:

在該AJAX EVENT 的定義中,使用這個程式碼:

sc_ajax_javascript('speochere', array());

這是 SC 的 macro,在 PHP 程式中呼叫 Javascript 的 method ,來儲存資料。

(我正在傷腦筋,如何在 Dashboard 中,一個 左邊的 Widget 執行程式完畢,然後呼叫讓右邊的 Widget 自動 reload,這個好像可以用。試試

哇!sc_ajax_javascript()只用在 FORM/CONTROL/CALANDAR,我的是 GRID!!不能用!哀!)



2023年8月20日 星期日

程式撰寫編碼,以可讀性為最高優先,一些較少用、非直觀的語法,盡量不要用,以PHP的 AND/&&、OR/|| 為例

PHP 的 邏輯運算元:AND/&&、OR/|| 這是常使用的運算元

而,AND 與 && 都是 AND 運算,有差別嗎?

有,其運算的優先次序不同。

&& 的運算次序高於 = , = 高於 AND

OR 一樣。

為了便於可讀性,我們建議一律使用可讀性高的表示法

如果有多個運算元在一起的運算式,就使用()來明確的表示優先次序,不要使用 && 這類不容易閱讀的運算元。


2023年8月18日 星期五

SC 的 sc_include_library()、sc_url_library() MACRO

SC 做好一些現成的 Macros 可以使用。其中:

sc_include_library("Target", "Library Name", "File", "include_once", "Require")

This macro includes a PHP file from a library in the application. You must have a library created in Scriptcase to make use of this macro. To create a library, go to "Tools -> Libraries".

Parameter
Description
TargetTells you what the scope of the library. It can be "sys" for libraries of Public scope or "prj" for libraries of the Project scope.
Library NameName given to the library at the time of creation.
FileThe absolute path within the library.
include_once (optional)Make sure that the file will only be included once. If not informed, this value is set as "true".
Require (optional)If the file or library does not exist, the application to be executed and returns an error. If not informed, the value is set as "true".

 

 

Ex: Including a file from a library:
sc_include_library("prj", "phpqrcode", "qrlib.php", true, true);



這是 External Library。
剛才試了 自己建 treeview 這個 Library,
裡面有一個 .css、一個 .js、 一個 .php、還有一個 images/tree/... 裡面的一個些圖檔

在 css 中,會用到這些圖檔,如下:
ul#n_0 {
padding-left: 0px !important;
background-image: url(images/tree/blank.gif) !important;
}

注意,那個 url(images/tree/blank.gif) 的 相對位址 images ,就直接在 Library 裡面建立 images/tree/ 的資料夾放置那些圖檔。

在SC 程式中要引用的時候,用法:

<link rel="stylesheet" type="text/css" href="<?php echo sc_url_library('prj', 'treeview', 'treeview.css'); ?>">
<script type="text/javascript" src="<?php echo sc_url_library('prj', 'treeview', 'tree.js'); ?>"></script>

這樣用。

另外,還有一個:

sc_include_library("prj", "treeview", "treeview_m.class.php", true, true);

我使用smarty 也是用這個:

// SMARTY

// Start output buffering
ob_start();
// run code in x.php file
// ...
// echo "<html><hrad></head><body>hello world!</body></html>";

sc_include_library("sys", "smarty", "Smarty.class.php", true, true);
// NOTE: Smarty has a capital 'S'
// require_once('Smarty.class.php');
$smarty = new Smarty();

$v_66shop_link = get_66shop_link_url("guest");

$smarty->assign('v_66shop_link_url',$v_66shop_link);

//** un-comment the following line to show the debug console
//$smarty->debugging = true;

$smarty->display('../_Designs/hongfu/index.html');
//echo $smarty->fetch('c:/temp/matrix_adm/html/index.html');

// saving captured output to file
// file_put_contents('c:/temp/filename.htm', ob_get_contents());
// end buffering and displaying page
ob_end_flush();

這兩個  Library 的用法,注意一下。






2023年8月15日 星期二

MySQL bit(1) 邏輯欄位 配合 View 後,竟然變了!

在資料庫表單中,經常有 Yes/No 的欄位,例如:是否已經繳款?是否審核通過?等。
原本,按理說,這樣的邏輯是否資料值的欄位,只要用 bit(1) 就足夠了。所以,我原本也就是用 bit(1) 來記錄就可以了。

結果在昨天設計SC時,由於需要使用到 VIEW,也就是SC是透過VIEW的方式來建立 GRID,(這另外說),結果 bit(1) 欄位值在 VIEW 的後面,都變成 True !連 False 也變成 True!造成程式跑出來當然就錯了!這不算是 SC的坑,但是 MySQL + VIEW 的坑了!我只好將 bit(1),改成 tinyint(1) 來記錄 0/1,這樣修改資料表結構以後,程式就完全正常了!

在這裡紀錄一下,一個小坑!

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

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