0

私は現在、ショッピングカートを維持する必要がある PHP のアプリケーションを使用しています。すべてがうまくいっています。

カートにアイテムが追加されると、カートに1つのアイテムが含まれている場合、各ページのヘッダーに「ショッピングバスケットに1つのアイテム」のようなメッセージを表示する必要があります。

追加のアイテムが追加 (または削除) されると、 「ショッピング バスケットに 2 つのアイテムが入っています」などのように、ページを更新せずにそれに応じてメッセージが変更されます。

私が直面している問題は、一部のアイテムがカートに追加または削除されたときにページを更新する必要があることです (その後、ページのヘッダーに更新されたアイテムが表示されます)

たとえば、カートに現在 2 つのアイテムが入っていて、さらに 1 つのアイテムが追加されたとします。ヘッダーのメッセージには、「ショッピング バスケットに 3 つのアイテムが入っています」と表示される代わりに、「ショッピングバスケットに 2 つのアイテムが入っています」と表示されます。ページが更新されます。


Java では、SessionListener次のようになります。

package sessionListener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener()
public class SessionListener implements HttpSessionListener
{
    private HttpSession session=null;        

    @Override
    public void sessionCreated(HttpSessionEvent se)
    {
        session=se.getSession();
        //Use this session            
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se)
    {

    }
}

sessionCreated()セッションが最初に作成されたときに一度だけ実行されるメソッドであるため、要件に合わせてメソッドを使用できたはずです。

同様に、.NET には、次のような Global.asax アプリケーション ファイルがあります。

<%@ Application Language="C#" %>

<script runat="server">

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {

    }

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup

    }

    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown            
    }

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
        Session.Add("Message", SomeValue);            
    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.

        Session.Abandon();

    }

</script>

void Session_Start(object sender, EventArgs e)このメソッドは、セッションの開始時に 1 回 (ユーザーのセッションごとに 1 回) だけ呼び出されるため、要件に合わせてこのメソッドを使用することもできました。

しかし、PHP では、新しいセッションが作成されたときに一度だけ実行される同様の概念を見つけることができません (現在、PHP でフレームワークを使用していません)。

もしそうなら、ページをまったく更新せずにショッピングカートのステータスが更新されたときに、各ページのヘッダーに上記のメッセージを表示するにはどうすればよいですか?

4

3 に答える 3

2

更新せずにページの一部を変更するには、クライアント側の言語が必要です。Javascript は、特に AJAX 呼び出しの場合に役立ちます。ショッピング カートのアイテム数を返す PHP スクリプトを呼び出します。

ユーザーがブラウザーで複数のタブを開いている場合でも、これを X 分ごとに呼び出して項目数を更新できます。

于 2012-04-21T13:21:02.663 に答える
0

JavaScript の AJAX 呼び出しを使用して、ページを更新せずにサーバーに要求を行うことができます。

ただし、一部のブラウザーは JavaScript をサポートしていない (または無効にしている) ことに注意してください。そのため、ページを更新してもスクリプトが機能することを確認してください。

于 2012-04-21T13:24:47.103 に答える
0

私が 1 つのプロジェクトで行ったように、ショッピング カートは、変更のたびに 2 つの場所で更新されます。サーバー上とロードされたページで、動的に更新されます。

カート項目の +/- ボタンをクリックして数量を変更すると、次の処理を行う JavaScript イベントが発生します。

  1. サーバーにajax 呼び出しを行い、カートの内容が変更されたことをサーバーに知らせます。
  2. 読み込まれたページに表示されているカートを更新します。

たとえば、 jQueryMootoolsなどの JS ライブラリを見てください。コードをゼロから作成するよりも、JS スクリプト作成がはるかに簡単になります。他にも同様のライブラリがたくさんあります。

于 2012-04-21T13:40:06.263 に答える