0
<global>
    <models>
        <starmall_shipment>
            <class>Starmall_Shipment_Model</class>
            <resourceModel>starmall_shipment_mysql4</resourceModel>
        </starmall_shipment>

        <starmall_shipment_mysql4>
            <class>Starmall_Shipment_Model_Mysql4</class>
            <entities>
                <shipment>
                    <table>starmall_shipment</table>
                </shipment>             
            </entities>
        </starmall_shipment_mysql4>
    </models>
</global>

バックエンドのカスタム グリッドが機能しており、データを含むグリッドが表示されます。
デバッグ テストとして、次の Grid.php にある_prepareCollection:

    $x = Mage::getModel('starmall_shipment/shipment');
    $x->load(3);

    var_dump($x);  // WORKS and I get information

これをスタンドアロン スクリプトで実行すると、次のようになります。

<?php
    define("MAGE_BASE_DIR", "/home/users/xxx/xxx");
    require_once MAGE_BASE_DIR . '/app/Mage.php';
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

    $x = Mage::getModel('starmall_shipment/shipment');
        $x->load(3);

    var_dump($x);   
?>

次のエラーが表示されます。

No such file or directory  in /home/users/xxx/xxx/lib/Varien/Autoload.php
Failed opening 'Mage/Starmall/Shipment/Model/Shipment.php'

なぜMageモデルの前に追加するのですか? 私の設定で何が間違っている可能性がありますか?


追加情報:

/app/etc/Starmall_Shipment.xml

<config>
<modules>
    <Starmall_Shipment>
        <active>true</active>
        <codePool>local</codePool>
    </Starmall_Shipment>
</modules>


本当の問題 (おそらく)

私の Magento ホスティング プロバイダーは、/app/etc/local.xmlMagento のインストール時にこのタグのデフォルトの int を配置します。

<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host>unix:///path/to/memcached.sock</host>
        <persistent>0</persistent>
        <port>0</port>
      </server>
    </servers>
  </memcached>
</cache>

このタグをコメントアウトするloadModules()と、スクリプトで使用する必要がなくなります。
本番モードに入るときにこれをオンに戻す必要があるのだろうか?

4

7 に答える 7

4

Magento cron がどのように機能するかを見てみましょう - スタンドアロン スクリプト (cron.php) としても機能し、コードをカスタム モジュールにコピー アンド ペーストします。主なもの:

 require 'app/Mage.php';
 ...
 Mage::getConfig()->init()

また、モジュールがロードされていないようです init configの後に追加してみてください:

Mage::getConfig()->loadModules();
于 2013-01-18T14:46:23.797 に答える
1

モデルの前に Mage を追加するのはなぜですか? 私の設定で何が間違っている可能性がありますか?

これがどこで起こっているかを確認するには、次を参照してくださいMage_Core_Model_Config::getGroupedClassName()

    if (empty($className)) {
        if (!empty($config)) {
            $className = $config->getClassName();
        }
        if (empty($className)) {
            $className = 'mage_'.$group.'_'.$groupType;
        }
        if (!empty($class)) {
            $className .= '_'.$class;
        }
        $className = uc_words($className);
    }

これは、次の 2 つのいずれかを意味します。

  1. $configノードが見つかりませんでした( global/models/starmall_shipment)
  2. ノードに子がないclassか、model空です

あなたの場合は(1)のように見えるので、なぜ設定がロードされないのかという疑問が残ります。構成自体が正しいことを保証したので、問題はモジュールがロードされていないことであるに違いありません。

からモジュール宣言ファイルを投稿できますapp/etc/modulesか?

于 2013-01-22T01:04:06.673 に答える
0

ストアでコンパイルモードが有効になっているかどうかを確認します([システム]->[ツール]->[コンパイル])。有効になっている場合は、コンパイルプロセスを再実行します。

于 2013-01-21T13:15:54.060 に答える
0

コア ディレクトリの 1 つであるため、先頭に Mage を追加しています。私のサーバーでは、ナビゲート可能なパスとして /var/www/app/code/core/Mage/ が表示されます。

スタンドアローン スクリプトを mage ベース ディレクトリに配置し、「最初」に次のコードを使用します。

<?php
   require_once 'app/Mage.php';
   Mage::app('admin'); 

うまくいけば、これで magento を起動して実行するのに十分であり、パスが期待どおりに機能しない理由を理解できます。

于 2013-01-18T13:47:15.703 に答える
0

Mage::app('admin'); を追加した後、CarComp を書き込みます。
Mage::getConfig()->init() は魔法のように機能します。

于 2014-06-24T09:05:48.207 に答える
0

次のように<global>タグの下にモデルを定義する必要がありますconfig.xml

<global>    
    <models>
        <starmall_shipment>
            <class>Starmall_Shipment_Model</class>
            <resourceModel>starmall_shipment_mysql4</resourceModel>
        </starmall_shipment>

        <starmall_shipment_mysql4>
            <class>Starmall_Shipment_Model_Mysql4</class>
            <entities>
                <shipment>
                    <table>starmall_shipment</table>
                </shipment>             
            </entities>
        </starmall_shipment_mysql4>
    </models>
</global>   

モジュールの外部から if にアクセスしているためです。

于 2013-01-21T16:47:02.073 に答える