データセンターダイレクト 紹介資料ダウンロード

9月 03

おひさしぶりです。
fshです。

今回はEC-CUBEの商品詳細ページにある “この商品について問い合わせる” をクリックしたときの
問い合わせフォームをデフォルトと違うフォームを作成したい場合の自分なりの方法です。

まずは下記フォルダをコピーして、適当なフォルダ名に修正する。

/data/class/pages/contact
/data/class_extends/page_extends/contact
/data/Smarty/templates/default/contact
/html/contact

問い合わせフォームのメールテンプレートを作成して
下記フォルダに保存する

/data/Smarty/templates/default/mail_templates

修正箇所は、
①テンプレートフォルダのリンク先の修正をする。
②プログラムの修正

/data/class/pages/contact/LC_Page_Contact.php
    function init() {
        parent::init();
        $this->tpl_mainpage = 'contact2/index.tpl';  ← ここを修正(フォルダ名)
        $this->tpl_title = 'お問い合わせ(入力ページ)';
        $this->tpl_page_category = 'contact2';    ← ここを修正(フォルダ名)

        $masterData = new SC_DB_MasterData_Ex();
        $this->arrPref = $masterData->getMasterData("mtb_pref", array("pref_id", "pref_name", "rank"));
    }

     if ( ! $this->arrErr ){
            // エラー無しで完了画面
            $this->tpl_mainpage = 'contact2/confirm.tpl';   ← ここを修正(フォルダ名)
            $this->tpl_title = 'お問い合わせ(確認ページ)';
      } else {
            foreach ($arrConvertColumn as $key) {
                $this->$key['column'] = $this->arrForm[$key['column']];
            }
      }

     $toCustomerMail = $objMailText->fetch("mail_templates/contact_mail2.tpl");  ← ここを修正(メールテンプレート名)

/data/class/pages/contact/LC_Page_Contact_Complete.php
    function init() {
        parent::init();
        $this->tpl_mainpage = 'contact2/complete.tpl';  ← ここを修正(フォルダ名)
        $this->tpl_title = 'お問い合わせ(完了ページ)';
        $this->tpl_mainno = 'contact2';            ← ここを修正(フォルダ名)
    }

/html/contact/index.php
require_once(CLASS_EX_PATH . "page_extends/contact2/LC_Page_Contact_Ex.php"); ← ここを修正(フォルダ名)

/html/contact/index.php
require_once(CLASS_EX_PATH . "page_extends/contact2/LC_Page_Contact_Complete_Ex.php");← ここを修正(フォルダ名)

あとは、入力ページ→確認ページ→入力ページ のページ間でのフォームデータの引継ぎがうまくいかず
やり方がわからず

/data/Smarty/templates/default/contact/index.tpl
    {if $smarty.get.ID名}

    {else}

    {/if}

/data/Smarty/templates/default/contact/confirm.tpl

を追加して対応することに・・・・・
まだまだ勉強しないといけないと痛感しました。
なお、テンプレートに関しては、<!—->というコメントアウトは省略してあります。
自分はEC-CUBEのソースをコピーするときこれでよくはまります。

投稿者: fsh
10月 07

DT@以前はJava使いだったこともあります。

久々にJavaを触ってみようと思い、どうせならWeb系に役立つものをとGrailsとやらを入れてみる。

更にせっかくなので最近メインマシンになりつつあるMacBookに入れて見ます。
Macportsからでも可能みたいですが、Macに不慣れなので手動でやってみます。

環境

MacBook 700J

Mac OS X 10.4.11

  • Grailsのインストール
    Grails – Download GrailsからBinaryZIPをダウンロード。
    /Users/user名に展開
  • 環境変数GRAILS_HOMEを設定。
$export GRAILS_HOME=/Users/user名/grails
  • JAVA_HOMEが設定されていなければ、同じように設定。
$export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/
  • grailsのbinディレクトリにパスを通す

$export PATH=/Users/user名/grails/bin:$PATH

シェルからgrailsと入力してメッセージが表示されればOK

$ grails
Welcome to Grails 1.0.3 – http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /Users/user名/grails

No script name specified. Use ‘grails help’ for more info or ‘grails interactive’ to enter interactive mode

次回シェル起動時に再設定しなくてもいいように.bash_profileに下記を設定

export PATH=/Users/user名/grails/bin:$PATH
export GRAILS_HOME=/Users/user名/grails
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/

これから、ぼちぼち触っていきます。

投稿者: DT
9月 20

PC:Aから PC:Bの共有フォルダにアクセスして任意のファイルを取得したくて
「Visual C++」で四苦八苦してみました。

開発環境->Visual Studio 2005
言語->C++
プロジェクト->Win32 コンソールアプリケーション

手始めに、「Directory.Exists( Path )」を使用してPC:Bの共有フォルダにアクセスをしてみたところ「false」が返ってきました。

ヘルプを詳しく読んで見ると
「Exists メソッドは、ネットワーク認証を実行しません。事前に認証を行わずに既存のネットワーク共有を照会すると、Exists メソッドが false を返します。」

試しにエクスプローラなどで一度認証してからだと 「True」 が返ってきた。

どうしたらネットワーク認証が出来るか調べていたら
「.NET Frameworkでは、共有フォルダーにアクセスが出来ない」ってことらしく

今回は「.NET Framework」だけを使用してコードを書こうと考えていたのに

気を取り直して、SDK プラットフォームの「WNetAddConnection2」を使用してネットワーク認証を行うことにしましたが、うまくいかずコードの修正をしてみましたがダメでした。
どうやらアクセスされるPC側でアカウントを作成していないと駄目なようです。

Windows サービスの実行に良く使われる Local System アカウントには、ネットワーク資源への接続権限がありません。
Windows サービスでネットワーク資源にアクセスする必要がある場合、「ネットワーク資源にアクセスする必要がある Windows サービスを実行するための専用アカウント(=必要最低限の権限に絞込み、余分な処理は許さない)」を作成して、そのアカウントでサービスを実行するのが一般的な解決策です。

アクセスされるPC側、今回の場合、PC:B側にアクセス用のアカウントを作成してみたところ上手く行きました。(*´∀`)♪

覚書


PC:A

OS->WindowsXP

ログインアカウント->「admin」、パスワード->「hoge」

PC:B

OS->WindowsNT 4.0

ドメインユーザマネジャーにて

ユーザ->「hostname」、パスワード->「hoge」、グループ->「Users」のアカウントを作成


VisualSutioにて、新規プロジェクトを作成

b1.JPG

次へボタンをクリック

b2.JPG

設定を変更せずに完了ボタンをクリック

b3.JPG

空のプロジェクトが作成される

b4.JPG

このままではビルド時にエラーが出てしまうので、下記の設定の追加を行う

「WNetAddConnection2」を使用するので、ライブラリーに「Mpr.lib」を追加

プロジェクトのプロパティページ表示させる

「リンカ」->「入力」項目内の「追加の依存ファイル」に「Mpr.lib」を追加する

b5.JPG

「CLR」を使用できるように「共通言語ランタイムサポート」を変更

プロジェクトのプロパティページ表示させる

「全般」項目内の「共通言語ランタイムサポート」にて、

「共通言語ランタイムサポート(/clr)」を選択する

b6.JPG

ソース wnet.cpp

#include “Winnetwk.h”
#include “stdafx.h”
#include “atlstr.h”

using namespace System;
using namespace System::Text;
using namespace System::IO;

int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwRet;
NETRESOURCE sNetResource;

ZeroMemory(&sNetResource,sizeof(NETRESOURCE));
sNetResource.dwType = RESOURCETYPE_DISK;
sNetResource.lpLocalName = NULL;
sNetResource.lpRemoteName = L”¥¥¥¥192.168.222.3¥¥Network¥¥rtconfig”;

dwRet = WNetAddConnection2(&sNetResource,L”hoge”,L”armada¥¥hostname”,0);

String^ path = gcnew String(“¥¥¥¥192.168.222.3¥¥Network¥¥rtconfig”);
if(Directory::Exists(path))
{
Console::WriteLine( “OK”);
}
else
{
Console::WriteLine( “NG”);
}

dwRet = WNetCancelConnection2(sNetResource.lpRemoteName,0,true);
Console::Read();

return 0;
}

最後に

dwRet = WNetAddConnection2(&sNetResource,L”hoge”,L”armada¥¥hostname”,0);

L”hoge”の「L」ですが、これがないと下記のようなエラーがビルト時に出てきてしまいます。

error C2440: ‘=’ : ‘const char [33]‘ から ‘LPWSTR’ に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
投稿者: achi
7月 31

最近は次世代ゲーム機が気になっているachiです。

ソケット通信のプログラムではWinSockを利用する方法が一般的ですが、試しにSocketクラスを使用してみたので、Socketクラスを使用したコードについて簡単に説明をさせていただきます。

コード自体は短く済むので、その前にSocketクラスについての情報を上げさせていただきます。

Socket クラス

Socket クラスは以下のインスタンスを含んでいます。

  • Socket(SocketInformation)
  • Socket(AddressFamily、SocketType、ProtocolType)

SocketクラスはWinSock(※1)のコアな部分を.NET Frameworkから扱えるようにしたクラスです。

※1 WinSock(1.0、2.0)
Microsoft .NETの標準動作環境であるCLRの管理を受けない、Windows用プログラムコード。従来のプログラムコードはすべてアンマネージドコードである。

Socket

Socketクラスのインスタンス

Socket (
 AddressFamily addressFamily, /* Socket がアドレスを解決するために使用するアドレッシング スキームを指定します。 */
 SocketType socketType, /* Socket の種類を定義 */
 ProtocolType protocolType/* Socke クラスがサポートするプロトコルを指定します。 */
)

各パラメータの詳細な説明は以下を参照してください。
AddressFamily
SocketType
ProtocolType

Socketを使用して、ホストへの接続方法

前述の通り、コード自体は以下のような短いもので簡単です。

Socket^s = gcnew Socket( AddressFamily::InterNetwork,  SocketType::Stream, ProtocolType::Tcp );
s->Connect( 192.168.222.60, 23 );

で、ホスト 192.168.222.60のポート23へ接続を行うことが出来ます。

WinSockはこれよりもっとコードを書かなくてはいけないので簡単なコードを書く場合はこちらの方が向いているかもしれません。

投稿者: achi
6月 29

業務改善で使用するツールを
「Microsoft Visual Studio 2005 VC++」で作成してみましたが、解らないことだらけでした。

今回は、作成中に?と思った事を書きたいと思います。

String objectを作成する時は
String^ str = gcnew String; と書きます。

いきなり^←これが解らなかった。

[^]これの意味は
ハンドル (Handle to Object on Managed Heap)
ポインタ「*」と同じ。ただしガベージコレクションをやってくれる。

新しい単語、ポインタ[*]とは
アドレス変数、つまり変数のアドレスを記憶する変数のことです。
int* a;
[*]をつけて ポインター[a]を宣言します。

.NET オブジェクトを作成する際に新しい C++ 構文では [new]ではなく、[gcnew] を使用します。
また、[gcnew] が返すのはポインタ [*] ではなく、ハンドル [^]を返します。

こんな初歩的なことを書いている私ですが、作成は無事完了しております。
だけど、Sourceを見るといつも修正をしたくなります。
でも、手段がわからず手を入れることが出来ません。

今度からはもう少し高度なことが書けるように頑張ります。

投稿者: achi
Get Adobe Flash playerPlugin by wpburn.com wordpress themes