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;

}

}



2021年11月29日 星期一

2021年11月28日 星期日

避免按鈕被按了兩次!

<input type="submit" id="Contenttrns_cpButton_Update" class="btn btn-lg btn-primary btn-block" alt="{res:CCS_Update}" value="{res:CCS_Update}" name="{Button_Name}"
onclick="javascript:{this.disabled=true;document.getElementById('Contenttrns_cpButton_Cancel').disabled=true;document.trns_cp.submit();}">

在按鈕裡面多增加 

onclick="javascript:{
this.disabled=true;
document.getElementById('<cancel按鈕的ID>').disabled=true;
document.form_name.submit();
}"

Cancel按鈕是否也要失效?

2021年11月23日 星期二

CodeCharge 做一個一對多的AUDI

例如:做一個客戶,以及客戶的0~n個地址

資料庫:

customers (cust_id, name, .... , address_id, ...)

customers_address (address_id, cust_id, name, address.....)


Page: address.php

用 CodeCharge 做一個 address.php

1. 建立一個 grid :address (where cust_id = $_SESSION["UserID"])

address_id, name, address, action

action 裡面 有 修改、刪除 連結

修改:<!-- edit -->

<a href="address.php?address_id={address_id1}&action=edit" class="nav-link-style me-2" data-bs-toggle="tooltip" title="修改"><i class="ci-edit"></i></a> 

刪除:<!-- del  -->

<a href="address.php?address_id={address_id2}&remove=1" class="nav-link-style text-danger" data-bs-toggle="tooltip" title="移除" onclick="return confirm('{res:are_you_sure}');"><i class="ci-trash"></i></a></td>

2. 再建立一個 record : address (where address_id = URL($_GET["address_id"]))

可以新增、刪除、修改、取消

3. 刪除功能,可以考慮在這個 Record 中處理,或是直接在 grid 中的 del action 中傳到 address.php的頁面 BeforeInitialize 中判斷 action=del處理刪除。

4. 幫 record 建立一個 panel,當有action 新增或修改時,才出現 panel,否則不顯現(visible=false)

5. 可以考慮,grid + record 建立一個 update_panel ,這樣就不用 refresh 頁面

但是,要犧牲在 grid 中刪除的連結,使用 onclick="return confirm('Are You Sure?')" 的功能

不論按確定、還是取消,該連結都會被呼叫(大概是因為身在 update panel 中的關係)

這個現象,只要將 update_panel 拿掉,就好了!

我在做客戶購物網站時,最後還是把 update panel 拿掉了!讓客戶操作便利比較好!

以後在另外尋找兩全其美的辦法吧!


這個頁面1-(0~n)處理應該很多。會常用到,紀錄一下。

Code Charge 其實還蠻好用的,可惜公司已經不再提供新版!

正在考慮找人開發一個工具,或是在找另一個現成的工具!

PHP JS 縣市、鄉鎮區的地址選單

 參考:https://marsz.tw/blog/articles/411

CodeCharge 的 Update Panel 如果裡面有用 JS Confirm 對話框會無效

CodeCharge 的 Update Panel 如果裡面有用 <a href="" onclick="return confirm('{res:are_you_sure}');">

對話框,按了 取消,她還是會被執行!

紀錄一下

2021年11月21日 星期日

2021年11月19日 星期五

HTML tag

<!--...-->

  • 做註解使用,瀏覽器不會顯示,不會執行。
  • 用以紀錄解說代碼使用,便於理解,修改、維護。


<main>....</main>

  • 用以表述這是文件document的主要內容。
  • 在 main 裡面的元素在文件中必須是唯一的
  • 他不應該存在一些會在文件的其他地方可能會重複出現的元素,例如:選單、鏈結、版權宣告、LOGO、搜尋表單等。
  • 一個文件 document 只能有一個 main
  • main 不能是 以下 元素 的子元件:<article>, <aside>, <footer>,<header>,<nav>
  • 可以搭配 CSS 來定義 <main> 元件(element)


<html>
<head>
<style>
main {
  margin: 0;
  padding: 5px;
  background-color: lightgray;
}

main > h1, p, .browser {
  margin: 10px;
  padding: 5px;
}

.browser {
  background: white;
}

.browser > h2, p {
  margin: 4px;
  font-size: 90%;
}
</style>
</head>
<body>

<main>
  <h1>Most Popular Browsers</h1>
  <p>Chrome, Firefox, and Edge are the most used browsers today.</p>
  <article class="browser">
    <h2>Google Chrome</h2>
    <p>Google Chrome is a web browser developed by Google, released in 2008. Chrome is the world's most popular web browser today!</p>
  </article>
  <article class="browser">
    <h2>Mozilla Firefox</h2>
    <p>Mozilla Firefox is an open-source web browser developed by Mozilla. Firefox has been the second most popular web browser since January, 2018.</p>
  </article>
  <article class="browser">
    <h2>Microsoft Edge</h2>
    <p>Microsoft Edge is a web browser developed by Microsoft, released in 2015. Microsoft Edge replaced Internet Explorer.</p>
  </article>
</main>

</body>
</html>

CodeCharge 搭配 CloudFlare經常沒用多久就自動被登出?!

 經過研究發現是 CodeChargeStudio 的 Common.php中有這一行:

if (session_id() == "") { session_start(); }

if (CCGetUserAddr() != $_SERVER["REMOTE_ADDR"]) { CCLogoutUser(); }

也就是 CCS 會檢查 REMOTE_ADDR,如果不一樣就會被強制登出!

解決這個問題,就必須拿掉這一行檢查。




//Initialize Common Variables @0-8AF2F782
$PHPVersion = explode(".",  phpversion());
if (($PHPVersion[0] < 4) || ($PHPVersion[0] == 4  && $PHPVersion[1] < 1)) {
    echo "Sorry. This program requires PHP 4.1 and above to run. You may upgrade your php at <a href='http://www.php.net/downloads.php'>http://www.php.net/downloads.php</a>";
    exit;
}
if (session_id() == "") { session_start(); }
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
  $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
// if (CCGetUserAddr() != $_SERVER["REMOTE_ADDR"]) { CCLogoutUser(); }

2021年10月24日 星期日

CodeCharge Studio 的 子網頁裡面的 Panel 的參照

一個子網頁(被 include 的子網頁),它裡面的 Panel ,要被參照,例如 visible

應該這樣用:

global $page;

$page->control->Visible = false;

$page->panel->Visible = false;


不可以這樣:

global $panel;

$panel->Visible = true;


這個問題,我經常弄錯,紀錄在這裡,提醒自己。


但是,如果是子網頁page -> 子網頁subpage -> Panel 

就不能再這樣用了!

function subpage_BeforeShow(& $sender)

global $subpage;

$subpage->control->Visible = false;

$subpage->panel->Visible = false;



比較困擾的應該是因為 Panel 是透明的,無法直接用 global $Panel1;這種方式

此時,只能使用 $Component 這個變數了!

例如:

function navside_BeforeShow(& $sender)

{

    $navside_BeforeShow = true;

    $Component = & $sender;

    $Container = & CCGetParentContainer($sender);

    global $navside; //Compatibility

//End navside_BeforeShow


//Custom Code @17-2A29BDB7

// -------------------------

    // Write your own code here.

    

           $db = new clsDBconn_mysql();

$SQL = "SELECT is_fund_opened(".

             $db->ToSQL($_SESSION["UserID"], ccsInteger) .

             ") as v_opened;";

$sql_log = "CALL system_log(".$db->ToSQL($SQL, ccsText).")";

$db->query($sql_log);

$db->query($SQL);

$result = $db->next_record();

if ($db->f("v_opened")==0) {

    $Component->Panel1->Visible = True;

    $Component->Panel2->Visible = False;

} else {

    $Component->Panel1->Visible = False;

    $Component->Panel2->Visible = True;

}


    

    $db->close();

    

    

// -------------------------

//End Custom Code


//Close navside_BeforeShow @1-E75A1C39

    return $navside_BeforeShow;

}


這一段 CCS 自己的說明,要好好看看:

Referencing Objects

The objects in the Web applications generated by CodeCharge Studio can be referenced in a variety of ways. In many cases, to work with a specific object within a program you will need to know its position within the program hierarchy. For example, an object that is placed directly on the page may need to be addressed differently compared to an object placed within a form (which is also an object).

ASP

Examples of working with objects Syntax
Form object placed on a page Page Events <form>.Visible = False
Form Events EventCaller.Visible = False
Control object placed within a form Page Events <form>.<control>.Value = "123"
Form Events EventCaller.<control>.Value = "123"
Control Events EventCaller.Value = "123"
Control object placed on a page Page Events <control>.Value = "ABC"
Control Events EventCaller.Value = "ABC"
Control object placed on an included page Main Page Events <page>.<control>.Visible = False
Includable Page Events EventCaller.<control>.Visible = False
Control Events EventCaller.Visible = False
Form object placed on an included page Main Page Events <page>.<form>.Visible = False
Includable Page Events EventCaller.<form>.Visible = False
Form Events EventCaller.Visible = False
Control object placed in a form within an  included page  Main Page Events <page>.<form>.<control>.Visible = False
Includable Page Events EventCaller.<form>.<control>.Visible = False
Form Events EventCaller.<control>.Visible = False
Control Events EventCaller.Visible = False

Note: Using EventCaller is recommended when planning to reuse the event code since it doesn't require referring to objects by name.

Perl

Examples of working with objects Syntax
Form object placed on a page $<form>->{Visible} = 0;
Control object placed within a form $<form>->{<control>}->SetValue("123");
Control object placed on a page $<control>->SetValue("ABC");
Control object placed on an included page $<page>->{<control>}->{Visible} = 0;
Form object placed on an included page $<page>->{<form>}->{Visible} = 0;
Control object placed in a form within an included page  $<page>->{<form>}->{<control>}->{Visible} = 0;
Assigning an object to a variable $<variable> = $<object>;

Java

Examples of working with objects Syntax
Form object placed on a page Page Events e.getPage().getComponent("<form>").setVisible(false);
Form Events e.getComponent().setVisible(false);
Control object placed within a form Page Events e.getPage().getComponent("<form>").getControl("<control>").setValue("123");
Form Events e.getComponent().getControl("<control>").setValue("123");
Control Events e.getControl().setValue("123");
Control object placed on a page Page Events e.getPage().getControl("<control>").setValue("ABC");
Control Events e.getControl().setValue("ABC");
Assigning an object to a variable <variable> = <object>;

Note: The syntax for accessing objects in an included page from events within the same included page is the same as specified above. The syntax for accessing objects in an included page from events within the including page is not supported. The syntax for accessing objects in the including page from events within the included page is also not supported.

C#

Examples of working with objects Syntax
Form object placed on a page Grid and Editable Grid Events <form>Repeater.Visible = false;
Record Events <form>Holder.Visible = false;
Directory and Path Events <form>.Visible = false;
Control object placed within a Record form <form><control>.Visible = false;
Control object placed within a Grid, Editable Grid, Directory and Path form Control's Before Show Event <form><control>.Visible = false;
Form's Before Show and Before Show Row Event Object reference should be retrieved from the FormControls collection.
See the ItemDataBound Event MSDN example.
Control object placed on a page <control>.Visible = false;
Assigning an object to a variable <variable> = <object>;

Note: The syntax for accessing objects in an included page from events within the same included page is the same as specified above. The syntax for accessing objects in an included page from events within the including page is not supported. The syntax for accessing objects in the including page from events within the included page is also not supported.

VB.Net

Examples of working with objects Syntax
Form object placed on a page Grid and Editable Grid Events <form>Repeater.Visible = False
Record Events <form>Holder.Visible = False
Directory and Path Events <form>.Visible = False
Control object placed within a Record form <form><control>.Visible = False
Control object placed within a Grid, Editable Grid, Directory and Path form Control's Before Show Event <form><control>.Visible = False
Form's Before Show and Before Show Row Event Object reference should be retrieved from the FormControls collection.
See the ItemDataBound Event MSDN example.
Control object placed on a page <control>.Visible = False
Assigning an object to a variable <variable> = <object>

Note: The syntax for accessing objects in an included page from events within the same included page is the same as specified above. The syntax for accessing objects in an included page from events within the including page is not supported. The syntax for accessing objects in the including page from events within the included page is also not supported.

ColdFusion

Examples of working with objects Syntax
Form variable placed on a page or within a form <CFSET blnReadAllowed<form>=false>
Control variable placed within a form or a page <CFSET fld<control> = "abc">

Note: The syntax for accessing objects in an included page from events within the same included page is the same as specified above.

PHP

When using PHP you can address objects in a generic way as $Component to refer to the component raising the event, and $Container to refer to the host form of $Component. This method of referring to objects is recommended to make the event code reusable since it doesn't require referring to objects by name. You can also refer to objects using global variables, for example use $MyGrid to refer to 'MyGrid' grid.

Examples of working with objects in a generic way Syntax
Form object placed on a page Page Events $Component->form->visible = false;
Form Events $Component->Visible = false;
Control object placed within a form Page Events $Component->form->control->SetValue($Component->form->PageNumber);
Form Events $Component->control->SetValue($Component->PageNumber);
Control Events $Component->SetValue($Container->PageNumber);
Control object placed on a page Page Events $Component->control->SetValue("ABC");
Control Events $Component->SetValue("ABC");
Control object placed on an included page Main Page Events $Component->page->control->Visible = false;
Includable Page  Events $Component->control->Visible = false;
Control Events $Component->Visible = false;
Form object placed on an included page Main Page Events $Component->page->form->Visible = false;
Includable Page  Events $Component->form->Visible = false;
Form Events $Component->Visible = false;
Control object placed in a form within an  included page  Main Page Events $Component->page->form->control->Visible = false;
Includable Page  Events $Component->form->control->Visible = false;
Form Events $Component->control->Visible = false;
Control Events $Component->Visible = false;


Examples of working with objects using global variables Syntax
Form object placed on a page $form->Visible = false;
Control object placed within a form $form->control->SetValue("123");
Control object placed on a page $control->SetValue("ABC");
Control object placed on an included page $page->control->Visible = false;
Form object placed on an included page $page->form->Visible = false;
Control object placed in a form within an  included page  $page->form->control->Visible = false;



2021年6月16日 星期三

MYSQL: IF NOT EXIST () THEN ..... END IF;

 IF not exists (SELECT * FROM funit WHERE fu_id = in_myfu_id) THEN

ROLLBACK;

SET out_ret_code = CONCAT("ERROR: 操作人經營單位不存在資料庫中!",in_myfu_id);

CALL system_log(out_ret_code);

LEAVE proc_label;

END IF;

2021年5月15日 星期六

Bootstrap 5 的 iframe Embeded Youtube 影片做法改變了

https://getbootstrap.com/docs/5.0/helpers/ratio/#example 



<div class="ratio ratio-16x9">

  <iframe src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" title="YouTube video" allowfullscreen></iframe>

</div>

2021年4月23日 星期五

ScriptCase 複雜的 SQL Builder出來的資料集,可能導致翻頁錯誤

如題。

使用 ScriptCase Grid 建立新的 Application 時,如果使用 SQL Builder,如果是較複雜的 SQL Stmt,導致可能產生 Grid 顯示時,Page Up/Down翻頁程式有錯誤。

此時,只要將該 SQL Stmt 改成 建立 view 的方式,再來做成 Grid Application ,這樣就正常了!


2021年4月9日 星期五

ScriptCase 的按鈕 php 與 Ajax 有何不同

 ScriptCase 的表單Form,有按鈕功能。

按鈕有四種型態:PHP/JAVASCRIPT/AJAX/LINK

如果僅是更新資料庫欄位裡面的值,使用AJAX  PHP,就可以了。最快、簡便。

例如:

{confirmed} = 1;

{confirmed_dt} = date("Y-m-d H-i-s");

這是更新該筆資料紀錄裡面的兩個欄位值:Confirmed確認值為1、confirmed_dt 日期為當時日期。


如果一樣的程式碼,改成 PHP,那麼執行起來,就不一樣了。變成執行完程式,就離開這個Application!也沒有自動存檔,所以,這樣處理是不對的。


--------------------------------------------------------------------------

1. 在 Programming -> JavaScript Methods -> New Method

建立一個新的 Method,內容只有一行:

nm_atualiza ('alterar');

Name 例如為: jssave

這是SC本身執行 SAVE(或 UPDATE)的 JavaScript Code。


2. 建立一個 Ajax Button

程式碼:

{confirmed} = 1;

{confirmed_dt} = date("Y-m-d H-i-s");

sc_ajax_javascript('jssave', array());

{confirmed}、{confirmed_dt}這是兩個要改變內容值的欄位。

SCriptcase 放置按鈕在FORM/GRID隨意的位置

將按鈕放置在 Scriptcase Form / Grid的任意位置

就 Scriptcase 而言,設計一個按鈕放在表頭、或是表尾,是一件非常簡單的事情。

但有時候,會希望將按鈕放在距離特定資料附近的位置,這樣比較直觀。

It’s easy to create a button on the top or bottom of a Scriptcase form or Grid application (as element of the toolbar).

But sometime you might need buttoms directly near certain elements within the form (or within the line of a grid).

1. Create a link for the action (if you click on the button)

One of the easiest ways is to use the Scriptcase macro:

sc_make_link(Application, Parameters)

example:

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

The generates a string with the link to the Grid-application ‘grid_images’ and passes the parameters ‘ref_object_type’ and ‘ref_object_id’

2. Create a label field

Create a field of ‘Label’ type within the form / grid and insert it at the place the button will appear.

Our example uses a Label-field named ‘edit_picture’

Then the new field will be filled via PHP-code (i.e. in the event OnLoad):

 

3. Set the Content of the field

Add a usual HTML link (via a href) as contact of the field:

{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>';

We’re using the string generated in 1. as link.

‘class’ defines that a small button is to be used. You could also use  class="scButton_default" for a standard button. Hint: Some templates do not support small buttons.

‘title’ defines which text is be shown as popup if the cursor is over the button (PC-browser only).

{lang_contact_edit_pictures} defines which text is shown on the button. (Our sample: Bilder Bearbeiten)
Hint: Use plain text instead of {lang_contact_edit_pictures} of your’re not using the multilingual feature of Scriptcase.

Example:

If the lable field is placed below a picture, ot could be show like:



上面的例子,是連結到外部的Application。

如果是自己FORM/GRID本身的Button呢?

可以先使用SC內的BUTTON功能,建立一個 Button,然後跑跑結果看,用檢視原始碼看該Button的Source Code連結,複製出來。

比照上面的作法,建立一個 Label 欄位,將上段Button複製下來的Source Code貼到該 Label 的內容裡面,

安排該Field顯示在適當的位置。這樣就完成了。

缺點是:原本預設顯示在表頭/表尾的按鈕,必須重複出現。因為如果把該按鈕不顯示,該功能就不行執行了!


2021年1月28日 星期四

session_id()

 如果有 Session_id() 要延續,程式是這樣:

session_id($_GET["sid"]);

session_start();


2021年1月27日 星期三

CodeCharge checkbox 如果是只在 前端javascript 用,就不要用內建的 form->checkbox

 CodeCharge checkbox 如果是只在 前端javascript 用,就不要用內建的 form->checkbox


如果在 html 使用  code-charge 內建的 checkbox ,他會 表現得跟單純的 html checkbox 不大一樣。

如果只是要在前端使用 javascript ,不會更新後端資料庫,就不要用CCS內建的checkbox!

他會不一樣!很頭大!

例如:寫 購物車,結帳,收件人與會員資料一樣,前面加個 check,讓用戶選擇,只要 click on, 就複製會員資料到收件人欄位裡,這個功能只要單純的 javascript 就可以了。

那麼,就使用單純的 html 的 checkbox 就好。千萬不要使用CCS內建的checkbox,會無法使用!

紀錄 下



        <div class="form-group">

          <label>請填寫送貨收件人資料 (請填入收件人真實姓名,以確保順利收件)</label>

        </div>

        <hr>

        <div class="form-group">

        <div class="checkbox">

          <label for="contentorderssame_with_customer">

<input type="checkbox" id="contentorderssame_with_customer" onclick="same_with_customer()">

          {res:same_with_customer}

          </label>

</div>

</div>

       <div class="form-group">

          <label for="contentordersdelivery_name">{res:delivery_name}</label>

          <input type="text" class="form-control" name="{delivery_name_Name}" value="{delivery_name}" id="contentordersdelivery_name">

        </div>

 

        <div class="form-group">

          <label for="contentordersdelivery_telephone">{res:delivery_telephone}</label>

          <input  class="form-control" type="text" name="{delivery_telephone_Name}" value="{delivery_telephone}" id="contentordersdelivery_telephone">

        </div>



<script language="JavaScript" type="text/javascript">

function same_with_customer()

{

if (document.getElementById("contentorderssame_with_customer").checked == true) {

document.getElementById("contentordersdelivery_name").value=document.getElementById("ss_customer_name").innerHTML;

document.getElementById("contentordersdelivery_telephone").value=document.getElementById("ss_customer_telephone").innerHTML;

} else {

document.getElementById("contentordersdelivery_name").value="";

document.getElementById("contentordersdelivery_telephone").value="";

}

}

</script>

2021年1月24日 星期日

CodeCharge 的 Validate Error 抓蟲經驗

 CCS欄位有自動檢查是否需要有值的功能,只要在"Required"設成"Yes",就可以了。

但是,奇怪,怎麼搞了半天,都沒有!

搞了好久。

只好去查原始碼~~~

Common.php

Classes.php

找到 clsControl 裡面的 Validate() method

使用 die("text -- $varibale"); 來查看變數內容,以抓蟲。

一個一個試,才發現問題出在 clsError->addError() 這裡!?

再查進去,原來是 

      $this->Errors->addError($CCSLocales->GetText('CCS_RequiredField', $this->Caption));

CCS_RequiredField 這一個tw-zh 沒有定義到!是空白的,出來的就是空白!
以至於加了Error ,還是沒有 Error

最後,把CCS_RequiredField語系檔定義進去,就跑出來了!

呼!!!鬆了一口氣!
終於找到原因了!

紀錄一下這個抓蟲經驗。

2021年1月20日 星期三

php 網頁跳離開網站到別的網站,再CALLBACK回來時,保持原來的登入狀態

離開時,要帶著 session_id 的參數,然後回來時,再帶回來該參數。

離開時: session_id()

回來時: 

if (!empty($_REQUEST["retsid"])) {

    session_id($_REQUEST["retsid"]);

    session_start();

}


2021年1月5日 星期二

CodeCharge 的目錄功能

 CCS 有內建的目錄產生功能。

在製作電子購物網站時,會有產品目錄,分層進去,然後才顯示產品目錄頁,然後才是產品單頁。

在製作目錄時,CCS的內建目錄可以有兩層結構。

為了簡化產品目錄結構,產品項目幾百個以內,大概分三層就可以了。

第一層是"館別",第二層是主目錄、第三層是子目錄,然後是產品。

如果將目錄製作成為 共用的 子網頁,可以被嵌入的子網頁。

那就分別製作 N個館別,然後顯示主目錄以及子目錄,共三層。

第一層、第二層,都只有顯示,不能連結。

第三層才可以連結。

由於目錄是製作成 嵌入式子網頁,會在每個網頁都出現。如果 傳入的 Get 參數有 Categories_id,那麼CCS的目錄結構就跟著跑了。所以,只要將要連結出去的 GET 參數 改成 category_id,跟原本的 categories_id 不一樣,就不會引動目錄跟著跑了!而要顯示第三層產品目錄的網頁,其 GET 參數跟著改成 category_id 這樣就完成了!

MySQL ERROR 1292 (22007): Truncated incorrect DOUBLE value

ERROR 1292 (22007): Truncated incorrect DOUBLE value

這個 Warning產生了。

經查是我這個個案是資料型態不一致造成的。

程式裡面,做了一個變數

DECLARE v_variable VARCHAR(100);

SET v_variable = IFNULL((SELECT abc FROM table WHERE id = 'aaa'),0);

IF (v_variable = 0) THEN

.........................

ELSE

...................

END IF;


v_variable 資料型態是文字,將他設為數字 0!

後面又拿文字來跟數值比較!所以產生了這個警告!

修改一下,就好了。


DECLARE v_variable VARCHAR(100);

SET v_variable = (SELECT abc FROM table WHERE id = 'aaa');

IF (v_variable IS NULL) THEN

.........................

ELSE

...................

END IF;


2021年1月4日 星期一

DA Download

 使用  DA 壓縮檔案後,

下載

然後,到另一個目錄

上傳

解壓縮!

結果:解壓縮還是回到原來的地方。

新的地方完全都沒有。

研究後才發現,原來 壓縮時有包含路徑。

所以,解壓縮後,還是存回原來的路徑。


正確的作法,應該是 下載到 Local,然後解壓縮,他會依照原先的路徑。然後,移動壓縮的目錄,用相對路徑,再重新壓縮。再上傳、解壓縮!完成!

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

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