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.xml在安装 Magento 时将此标签设置为默认 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()

此外,似乎未加载模块尝试在初始化配置后添加:

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

为什么要在模型前面加上法师?我的配置有什么问题?

要查看发生这种情况的位置,请查看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);
    }

这可能意味着以下两件事之一:

  1. $config找到节点 ( global/models/starmall_shipment)
  2. 节点没有classmodel子节点或为空

在您的情况下,它看起来像(1),所以问题仍然存在,为什么您的配置没有加载。你保证配置本身是正确的,所以问题一定是模块没有加载。

你可以发布你的模块声明文件app/etc/modules吗?

于 2013-01-22T01:04:06.673 回答
0

它在 Mage 之前,因为它是核心目录之一。在我的服务器中,我将 /var/www/app/code/core/Mage/ 视为可导航路径。

将您的独立脚本放在您的法师基础目录中,并在“开始”处使用以下代码

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

希望这足以让您的 magento 启动并运行,然后您可以弄清楚为什么路径没有按您期望的方式工作。

于 2013-01-18T13:47:15.703 回答
0

检查您的商店是否启用了编译模式(系统->工具->编译)。如果是,则重新运行编译过程

于 2013-01-21T13:15:54.060 回答
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 回答
0

问题确实在app/etc/local.xml,但不应该通过调用来解决Mage::app()->loadModules()

真正的问题是有人(很可能出于调试目的)禁用了本地模块。

只是改变

<disable_local_modules>true</disable_local_modules>

<disable_local_modules>false</disable_local_modules>

app/etc/local.xml.

于 2013-05-21T11:12:11.357 回答
0

CarComp 是写入,在添加 Mage::app('admin'); 之后
Mage::getConfig()->init() 的工作就像一个魅力。

于 2014-06-24T09:05:48.207 回答