0

我的任务是将独立的 PHP 文件转换为 Magento 的 MVC。这些 PHP 文件是由另一个开发人员创建的。PHP 文件中的代码访问数据库,将结果转换为 JSONP 格式并转发给前端开发人员。

我对 Magento 的 MVC 没有任何了解。这个转换任务是否类似于app/code/core/MageMagento 文件夹中的模块?我怎样才能做到这一点?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有必要吗?

4

2 回答 2

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://incho.net/ecommerce/magento/basic-folder-structure-for-new-magento-module/

于 2013-02-07T14:34:32.730 回答
0

有趣的问题。恕我直言,前段时间我对 Magento 的态度是你。编写和使用对 Magento 数据库的 mySql 查询不需要 MVC 模型中的任何内容。在我们的世界里,我把这些叫做巫毒文件。我为我的员工创建具有非常特定目的和未发布 URL 的工具。您可以将它们放在文件系统中的任何位置,只需确保目录名和文件名在 Magento 中没有任何神奇的含义,否则您可能会无意中禁用某些功能。我的销售税报告工具与您的完全相同,您可以在其中打开与 mySql 数据库的连接并对其进行直接手动查询。

RS 的答案是进入 MVC 的一个很好的入门。我也开始将它用于我的巫毒工具。通过他们的控制器以“Magento 方式”进行查询可以使从 EAV 中获取信息比尝试通过手动查询组合信息更容易,因为基础设施已经为您编码一个例子是客户信息!我弄清楚了销售税查询(这不是一件小事),但获得完整的姓名、地址和电子邮件是荒谬的。

我创建了一个输出 JSON 数据的导出工具。然后我从工作服务器上将其卷曲,以将销售额存储到 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 中正常显示和工作是一种痛苦的体验。如果您能够偷偷摸摸地使用隐藏的巫毒工具,请尝试这样做。如果你被迫制作一个模块,网上有几十个分步操作指南可以指导你。

于 2013-02-08T20:35:54.563 回答