我有一项任务是将独立的PHP文件转换为Magento的MVC。这些PHP文件是由另一个开发人员创建的。 PHP文件中的代码访问数据库,将结果转换为JSONP格式并将其转发给前端开发人员。
我对Magento的MVC一无所知。这个转换任务是否类似于Magento文件夹中app/code/core/Mage
中的模块?我怎样才能做到这一点? magento MVC和PHP MVC一样吗?
我包含我需要转换为Magento MVC的php文件。所以你会更容易理解..
<?php header('content-type: application/json; charset=utf-8');
$link = mysqli_connect("localhost", "db_username", "password", "db_dbname");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$pid = $_REQUEST['prodid'];
/* Select queries return a resultset */
$result = mysqli_query($link, "SELECT round(rating_summary / 20) AS search_rating FROM review_entity_summary where store_id = 1 and entity_pk_value=" . $pid);
// printf("Select returned %d rows.\n" . "<br>\n", mysqli_num_rows($result)) . "<br>\n";
//$string = $_REQUEST['varname'];
$rows = array();
/* while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}*/
//while($r = mysql_fetch_assoc($result)) {
while ($r = mysqli_fetch_assoc($result)) {
$rows = $r;
//print_r ($rows) . "<br>\n";
}
$json_data = json_encode($rows);
print_r ($json_data);
/* free result set */
// mysqli_free_result($result)
mysqli_close($link);
?>
那么如何将此文件转换为Magento的MVC风格?这有必要将此文件转换为magento MVC吗?
答案 0 :(得分:1)
我认为他们要求你做的是转换看起来像
的代码require_once 'path/to/magento'. "/Mage.php";
umask(0);
Mage::app("default");
....
进入Magento MVC(模块)
\app\code\local\MyNamespace
如果您是OOP新手,请查看此处:http://www.php.net/manual/en/language.namespaces.rationale.php
\app\code\local\MyNamespace\Appname
新自定义模块的名称 - 尝试至少保留首字母大写字母,或者Magento的理解将保持不变
\app\code\local\MyNamespace\Appname\Block
在经典的MVC架构中,这代表了MVC的View部分
\app\code\local\MyNamespace\Appname\controllers
这很容易理解,如果没有,请玩得开心:http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller
\app\code\local\MyNamespace\Appname \etc
包含Magento MVC架构中最重要的部分 - 将所有内容连接在一起的xml字段
\app\code\local\MyNamespace\Appname\Helper
用于包含可重复例程或简单程序方法的文件
\app\code\local\MyNamespace\Appname\Model
与控制器相同,请查看上面的链接
\app\code\local\MyNamespace\Appname\sql
有趣的是找出它的用途,定义自定义数据库表并处理扩展的任何升级。
\etc\modules
包含Magento中包含的所有模块 - 这里是我们的模块真正开始的地方
请参阅http://inchoo.net/ecommerce/magento/basic-folder-structure-for-new-magento-module/
答案 1 :(得分:0)
有趣的问题。恕我直言,你在前一段时间处于关于Magento的位置。要对Magento数据库编写和使用mySql查询,不需要MVC模型。在我们的世界里,我称这些伏都教文件。我为我的员工创建了具有特定目的和未发布URL的工具。您可以将它们放在文件系统中的任何位置,只需确保目录名称和文件名在Magento中没有任何神奇的含义,否则您可能会无意中禁用某些功能。我的销售税报告工具与您的完全一样,您可以打开与mySql数据库的连接并对其进行直接的手动查询。
RS的答案是进入MVC的一个很好的入门读物。我也开始将它用于我的巫毒工具。通过他们的控制器进行“Magento方式”查询可以使得从EAV中获取信息更多比通过手动查询整理信息更容易,因为基础结构已经为您编码。一个例子是客户信息!我想出了销售税查询(这不是次要的承诺),但获取完整的姓名,地址和电子邮件是荒谬的。我创建了一个输出JSON数据的导出工具。然后我从工作中的服务器CURL它将销售存储到mysql数据库中。从那里,他们被导入快速书。此订单导出工具是100%Magento对象,如下例所示。
以下是我在voodoo客户信息工具中使用的代码:
// this limits access to the page to this IP address, perhaps your office?
$remote_host_ip='198.75.43.24';
if( $_SERVER['REMOTE_ADDR'] != $remote_host_ip ){
$error[ date("Y-m-d_H:i:s") ]="\$_SERVER['REMOTE_ADDR'] is ".$_SERVER['REMOTE_ADDR']." which is not the office ip! $remote_host_ip\n";
}
// from: http://fishpig.co.uk/blog/direct-sql-queries-magento.html
require_once '/home/(your host username)/public_html/app/Mage.php';
// from: http://stackoverflow.com/questions/7145373/magento-fatal-error-call-to-a-member-function-getmodelinstance-on-a-non-obje/7145570#7145570
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(0);
// from: http://www.magentocommerce.com/boards/viewthread/297092/
$_dealers = Mage::getModel('customer/customer')
->getCollection()
->addFieldToFilter('group_id', array(6,5,3))
// ->addFieldToFilter('group_id', 6)
;
// print_r($_dealers);
$dealers=Array();
foreach( $_dealers as $id => $obj){
// $info=$obj->load();
// print_r($info);
// from: http://www.42droids.co.uk/magento-get-customer-and-address-details
$customerAddressId=$obj->getDefaultBilling();
$address = Mage::getModel('customer/address')->load($customerAddressId);
$_addr=$address->format();
$addr.=",".$address->telephone;
$addr.=",".$obj->email;
echo "$addr\n"; //var_dump($addr);
}
我通过谷歌,试用和错误完成大部分学习;所以请考虑“我的方式”只是一个适合我的方式,可能仍然不是最好或最简单的方法。此外,我仍然不完全理解一些对象是如何工作的,因此调试输出被注释掉了。
我的建议是不要太努力为客户面对“前端”做点什么。让页面显示并在Magento中正常工作是一种悲惨的体验。如果你能够做鬼鬼祟祟的隐藏巫毒工具,试着去做。如果你被迫制作一个模块,那么网上有几十个可以指导你的指导方针。