We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 15851
    • 16 Posts
    こんにちは。
    通販サイトをMODxで製作している者です。
    製作しているページで、TVをたくさん設定しています。

    [*pagetitle*](商品名)、[*商品ID*]、[*値段*]、[*商品カートID*]、[*description*](商品説明) etc...

    といった具合に。

    これらをcsvなどのファイルで一括管理する方法はないものかと探しています。
    管理画面のどこかに、csvをDLする箇所があったように思うのですが、
    勘違いだったかどうも見つかりません。またなんのデータのcsvであったかどうかも…

    どうぞ宜しくお願いします。
    • phpMyAdminを使う、ってテもありますね。スマートな方法ではありませんが。

      http://gigazine.net/index.php?/news/comments/20060730_automysqlbackup/
      こんな方法もあります。商品データだけではなく、全部まるごとですが。

      MODxでcsvデータとしてダウンロードというのは、たぶん「バックアップマネージャ」の
      sqlファイルダウンロードのことだと思います。

      MODxのデータを一括でバックアップをとるプラグイン(モジュールだったかな?)は
      あるので、もしphpプログラミングが分かるなら改造するなどして自作することが
      できると思います。ゼロから作るよりは効率がいいというのがMODxの特長の
      ひとつですが、もともと備わってる機能・または拡張により得られる機能として
      期待するぶんには、今のところ方法はなさそうです。
        • 8382
        • 253 Posts
        kiki707さん。
        なるほど、TV多いといちいち整合性を保って入力するのは大変ですよね。
        ただ推測するに商品IDが一意のキーになりうるのであれば、私ならこうしますというのを書いてみます。
        1.まずMODxのデータベースに下記のようなテーブルを作成します。内容は別途CSVファイルをphpMyAdminなどを使ってテーブルにアップロードして格納しましょう。
        CREATE TABLE `modx_userdef_products` (
          `productID`   int(9)      NOT NULL default '0',  --商品ID
          `productName` varchar(50) NOT NULL default '',   --商品名
          `price`       int(20)     NOT NULL default '0',  --値段
          `description` varchar(200)         default NULL, --説明
          `maker`       varchar(200)         default NULL, --メーカー
          `image`       varchar(200)         default NULL, --画像ファイル名
          PRIMARY KEY  (`productID`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品テーブル';

        2.TVに[*productID*]だけ定義します。上記の例で言うなら入力タイプはNumberです。
        3.残りのデータベースフィールドをページに呼び出すには、スニペットを定義します。商品名を表示するスニペットは以下のとおり。
        [[productName]]
        $productTVName = "productID";
        $productTableName = "userdef_products";
        $productIDFieldName = "productID";
        $productNameFieldName = "productName";
        
        $productID = $modx->getTemplateVar($productTVName);
        if($productID === false) return;
        $rs = $modx->db->query("SELECT `".$productNameFiledName."` FROM "
                               .$modx->getFullTableName($productTableName).
                               ." WHERE `".$productIDFieldName."` = ".$productID.";");
        if($modx->db->getRecordCount($rs)) {
          $row = $modx->db->getRow($rs);
          return $row["$productNameFiledName"];
        }
        return;

        4.後は使用するフィールド分、スニペットを作ります。以上

        こうすればドキュメントごとに、商品IDを入力するだけというテンプレートも作れるでしょう。
        こういうやり方もありますと言う例です。
          • 33488
          • 429 Posts
          すっごく似てる使い方をぷちやでもしています。
          が、CSVファイルの一括アップロードとかはショップではないので必要なかったので考えたことはなかったんですけど。
          CSVファイルによるアップが通常であれば、eastbindさんの方法がベストですね。
          管理者ページから1つづつ入れることが多いということであれば、TV使ってしまうのが楽ですが、CSVをアップするにはスニペットかモジュールを作る方向でないと難しいですね。
          phpmyadminでは、ちょっと無理でしょう。TVのIDとドキュメントのIDとの紐付けテーブルとTVのIDと実体のデータのテーブルに分かれているので・・・。

          確かにあると便利かも・・ちょっと検討してみようかなぁ、それよりもShopXの解析をした方が手っ取りはやいかもですね。
            • 15851
            • 16 Posts
            yama様
            eastbind様
            ZeRo様

            メッセージ&サンプルスクリプト、ほんとうにありがとうございます。
            お三方が仰せのようにやはりスニペットを自作するのが現状におけるベストなのですね。
            期待している効果としてはeastbind様の方法の通りでして、
            一度こちらのスクリプトで試してみたいと思います。


            これは、当方の事情なのですが、テンプレートや、カートID以外の商品データは揃っているのですが
            都合によりカートIDの確定だけは別のタイミングとなっているのです。
            こうした事情があった場合、こうした機能があれば非常にコンテンツ管理の自由度があがります。
            MODxはただコンテンツを自動作成するのではなく、こうした製作管理的な部分の向上でもアプローチしうる
            可能性があって、改めてすごいなあ…と思っているしだいです。

            重ねてありがとうございます!



              • 8382
              • 253 Posts
              kiki707さん。
              カートIDってやはり買い物篭のことなのでしょうか?それならZeRoさんの言うとおり、shopXの使用も御検討ください。
              shopXは買い物篭の処理を行うスニペット群なので、商品の見せ方に関わる部分はやはり別途必要なんです。
              商品テーブルと併用する事は全然問題ありません。

              後、商品説明をテーブルに入れてしまうと、MODx標準のサイト検索に引っかかりません。この点は注意です。ですから説明部分は[*content*]に入れることも必要かもしれません。

              以上、おせっかいかもしれませんが。 tongue
                • 33488
                • 429 Posts
                DBの解釈間違ってました(^^;;

                TVの実際の各ドキュメントに書き込むテーブル site_tmplvar_contentvaluesだけでした。
                構造としては、tmplvarid,contentid,value となっていますので、CSV一括アップするとしたら・・やっぱ、ちょっと面倒っすねぇ。

                eastbindさんもおっしゃってますが、ShopXをベースに改造してった方がよいかもです。
                決済部分も確かあったような、ちゃんと調べてはないですが・・。