<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>
后端的自定义网格正常工作,我看到网格中有数据
作为我在_prepareCollection
中的Grid.php中的调试测试:
$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托管服务提供商在安装Magento时将此标记默认为int /app/etc/local.xml
。
<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()
我想知道在进入生产模式时是否需要重新启用它?
答案 0 :(得分:4)
了解Magento cron的工作原理 - 它也可作为独立脚本(cron.php)和复制粘贴代码到您的自定义模块。 主要内容:
require 'app/Mage.php';
...
Mage::getConfig()->init()
似乎模块没有加载 尝试在init config之后添加:
Mage::getConfig()->loadModules();
答案 1 :(得分: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);
}
这可能意味着两件事之一:
$config
节点(global/models/starmall_shipment
)class
或model
子节点,或者它是空的在你的情况下它看起来像(1),所以问题仍然存在,为什么你的配置没有加载。您确信配置本身是正确的,因此问题必须是模块未加载。
您可以发布app/etc/modules
的模块声明文件吗?
答案 2 :(得分:0)
它是Mage的前置,因为它是核心目录之一。在我的服务器中,我将/ var / www / app / code / core / Mage /视为可导航的路径。
将您的独立脚本放在mage base目录中,并在“开头”使用以下代码
<?php
require_once 'app/Mage.php';
Mage::app('admin');
希望这足以让您的magento启动并运行,然后您就可以找出路径不按预期方式运行的原因。
答案 3 :(得分:0)
检查商店是否启用了编译模式(系统 - >工具 - >编译)。如果是,则重新运行编译过程
答案 4 :(得分: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>
因为您是从模块外部访问的。
答案 5 :(得分: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
中的。
答案 6 :(得分:0)
CarComp在添加后写入
法师::应用程序(&#39;管理&#39;);
该
Mage :: getConfig() - &gt; init()就像魅力一样。