0

我将要编辑代码以显示下一个可用月份而不是实际月份的价格,我被告知我需要编辑此代码,但我不知道如何...如果有人可以帮助我会理解它。

function get_property_price_for_display_in_lists($property_uid)
{
$MiniComponents =jomres_singleton_abstract::getInstance('mcHandler');
$mrConfig=getPropertySpecificSettings($property_uid);
set_showtime('property_uid',$property_uid);
$customTextObj =jomres_singleton_abstract::getInstance('custom_text');
$customTextObj->get_custom_text_for_property($property_uid);
$current_property_details =jomres_singleton_abstract::getInstance('basic_property_details');
$current_property_details->gather_data($property_uid);
$plugin_will_provide_lowest_price = false;
$MiniComponents->triggerEvent('07015',array('property_uid'=>$property_uid) ); // Optional
$mcOutput=$MiniComponents->getAllEventPointsData('07015');
if (count($mcOutput)>0)
    {
    foreach ($mcOutput as $key=>$val)
        {
        if ($val == true)
            {
            $plugin_will_provide_lowest_price = true;
            $controlling_plugin = $key;
            }
        }
    }

$multiplier = 1;
if (!isset($mrConfig['booking_form_daily_weekly_monthly'])) // This shouldn't be needed, as the setting is automatically pulled from jomres_config.php, but there's always one weird server...
    $mrConfig['booking_form_daily_weekly_monthly'] = "D";

switch ($mrConfig['booking_form_daily_weekly_monthly'])
    {
    case "D":
        $multiplier = 1;
        break;
    case "W":
        if ($mrConfig['tariffChargesStoredWeeklyYesNo'] != "1")
            $multiplier = 7;
        break;
    case "M":
        $multiplier = 30;
        break;
    }

$price = 0.00;
$output_lowest = false;
if ($plugin_will_provide_lowest_price)
    {
    $output_lowest = true;
    $plugin_price= $MiniComponents->specificEvent('07016',$controlling_plugin,array('property_uid'=>$property_uid));
    if (!is_null($plugin_price))
        {
        $pre_text = $plugin_price['PRE_TEXT'];
        $price =  $plugin_price['PRICE'];
        $post_text =  $plugin_price['POST_TEXT'];
        }
    }
else
    {
    $pricesFromArray=array();
    $searchDate = date("Y/m/d");
    if (isset($_REQUEST['arrivalDate']) && $_REQUEST['arrivalDate'] != "" )
        {
        $searchDate =   JSCalConvertInputDates(jomresGetParam( $_REQUEST, 'arrivalDate', "" ));
        }
    $query = "SELECT property_uid, roomrateperday FROM #__jomres_rates WHERE property_uid = ".(int)$property_uid." AND DATE_FORMAT('".$searchDate."', '%Y/%m/%d') BETWEEN DATE_FORMAT(`validfrom`, '%Y/%m/%d') AND DATE_FORMAT(`validto`, '%Y/%m/%d') AND roomrateperday > '0' ";
    $tariffList = doSelectSql($query);
    if (count($tariffList) > 0)
        {
        foreach ($tariffList as $t)
            {
            if ( !isset($pricesFromArray[$t->property_uid]) )
                $pricesFromArray[$t->property_uid]=$t->roomrateperday;
            elseif ( isset($pricesFromArray[$t->property_uid]) && $pricesFromArray[$t->property_uid] > $t->roomrateperday )
                $pricesFromArray[$t->property_uid]=$t->roomrateperday;
            }
        }
    if ($mrConfig['is_real_estate_listing']==0)
        {
        if (isset($pricesFromArray[$property_uid]))
            {
            if ($mrConfig['prices_inclusive']=="0")
                $price=output_price ($current_property_details->get_gross_accommodation_price($pricesFromArray[$property_uid],$property_uid) * $multiplier,"",true,true);
            else
                $price=output_price ($pricesFromArray[$property_uid] * $multiplier,"",true,true);

            if ($mrConfig['tariffChargesStoredWeeklyYesNo'] == "1" && $mrConfig['tariffmode'] == "1")
                $post_text = " ".jr_gettext('_JOMRES_COM_MR_LISTTARIFF_ROOMRATEPERWEEK',_JOMRES_COM_MR_LISTTARIFF_ROOMRATEPERWEEK);
            else
                {
                if ($mrConfig['wholeday_booking'] == "1")
                    {
                    if ($mrConfig['perPersonPerNight']=="0" )
                        $post_text =" ".jr_gettext('_JOMRES_FRONT_TARIFFS_PN_DAY_WHOLEDAY',_JOMRES_FRONT_TARIFFS_PN_DAY_WHOLEDAY);
                    else
                        $post_text =" ".jr_gettext('_JOMRES_FRONT_TARIFFS_PPPN_DAY_WHOLEDAY',_JOMRES_FRONT_TARIFFS_PPPN_DAY_WHOLEDAY);
                    }
                else
                    {
                    switch ($mrConfig['booking_form_daily_weekly_monthly'])
                        {
                        case "D":
                            if ($mrConfig['wholeday_booking'] == "1")
                                $post_text =jr_gettext('_JOMRES_FRONT_TARIFFS_PN_DAY_WHOLEDAY',_JOMRES_FRONT_TARIFFS_PN_DAY_WHOLEDAY);
                            else
                                {
                                if ($mrConfig['perPersonPerNight']=="0" )
                                    $post_text =" ".jr_gettext('_JOMRES_FRONT_TARIFFS_PN',_JOMRES_FRONT_TARIFFS_PN);
                                else
                                    $post_text =" ".jr_gettext('_JOMRES_FRONT_TARIFFS_PPPN',_JOMRES_FRONT_TARIFFS_PPPN);
                                }
                            break;
                        case "W":
                            $post_text =jr_gettext('_JOMRES_BOOKINGFORM_PRICINGOUTPUT_WEEKLY',_JOMRES_BOOKINGFORM_PRICINGOUTPUT_WEEKLY);
                            break;
                        case "M":
                            $post_text =jr_gettext('_JOMRES_BOOKINGFORM_PRICINGOUTPUT_MONTHLY',_JOMRES_BOOKINGFORM_PRICINGOUTPUT_MONTHLY);
                            break;
                        }

                    }
                }
            $pre_text = jr_gettext('_JOMRES_TARIFFSFROM',_JOMRES_TARIFFSFROM,false,false);
            }
        else
            {
            $pre_text =jr_gettext('_JOMRES_COM_MR_EXTRA_PRICE',_JOMRES_COM_MR_EXTRA_PRICE);
            $price = output_price($current_property_details->real_estate_property_price,"",true,false);
            $post_text = '';
            }
        }
    else
        {
        $pre_text = jr_gettext('_JOMRES_COM_MR_EXTRA_PRICE',_JOMRES_COM_MR_EXTRA_PRICE,"",true,false);
        $price=output_price($current_property_details->real_estate_property_price);
        $post_text = '';
        }
    }
return array ( "PRE_TEXT"=>$pre_text,"PRICE"=>$price,"POST_TEXT"=>$post_text);
}
4

2 回答 2

0

为什么这段代码很糟糕,为什么我不应该使用它?它来自 Jomres 预订系统,是的,开发人员告诉我要编辑这些行,为什么?代码是否难以理解和混淆,或者有很多快捷方式?

于 2012-11-20T10:02:45.967 回答
0

您需要修改的行是:

$searchDate = date("Y/m/d");

并在日期上加上一个月

$searchDate = date("Y/m/d") . " +1 month";

如果设置了到达日期,这将不起作用,但我想情况并非如此(一旦客户选择了日期,这将在预订期间发生)。

要回答您的第二组问题,代码很糟糕,原因如下:

  • 嵌套 if 使其不可读,有 4 级嵌套 if 甚至包含几个 switch 语句......调试和维护是一场噩梦
  • 对诸如此类的模糊调用

    $MiniComponents->triggerEvent('07015' $MiniComponents->specificEvent('07016'

绝对不是很不言自明。对象和方法应该是有意义的和文档化的。如果你打开 J07015...php 文件的代码(我不知道全名,应该在 core-minicomponents 文件夹中)你很可能会发现没有注释。你不想处理类似 $property->booking->getPrice() 的事情吗?

  • 它不是使用 Joomla 框架,而是一个自定义框架(您需要研究它,但文档并没有真正的帮助,而且对于单个组件来说这是一项艰巨的任务)

  • 应用程序架构完全混乱和混合。在 Joomla 中,我们认为 MVC 是理所当然的,在这里您可以看到一个不应该做的很好的示例:将应用程序逻辑与视图混合,您将看到输出字符串与数据库查询一起定义。

  • 没有正式的命名约定:一些变量在不同的迷你组件之间更改名称,让我们更加困惑。

为什么你不应该使用它

你所做的每一个改变都可能破坏一些东西。由于没有分离,也没有可用的单元测试,所以很难理解我们的行为的含义。即我在属性详细信息页面中更改了一个迷你组件,却发现我因此破坏了属性列表页面......

编码将需要任何其他组件的 10 倍,因为这不是 Joomla!它只是一个在 Joomla 中流畅运行的独立产品!(但您也可以单独安装它!)

你可以做些什么来减轻痛苦和降低风险

  • 使用代码版本控制,并仔细记录您所做的每一个更改。
  • 在所有更改后测试所有功能,这将在几天后为您节省时间。
  • 尝试创建自己的自定义插件(并将它们放在核心插件中),这可能是一种有效的方法来覆盖默认值,同时不会冒过多干扰项目其他部分的风险

那你为什么要使用它?

(我正在为其他读者写这一段,否则我们都似乎完全不喜欢使用它)

  1. 它在功能、完整性(开发票的前端)、配置(您可以根据需要微调多少)和易用性方面是最好的。Jomres 胜过任何其他基于 joomla 的解决方案,我在 2012 年 6 月花了两周时间测试所有价格低于 2,000 美元的可用酒店解决方案
  2. 该产品稳定且维护良好,为此付出了很多努力:6个月的更新日志花了我一个小时阅读。
  3. 支持很快,尽管当问题太棘手时,您会得到“您需要更改一些代码”的答案,这意味着“jomres 不会这样做,所以这是您的问题”
  4. 它已经存在了很长时间,并且有许多第三方扩展可用
  5. 它不花费一条胳膊和一条腿。

确保在编写新代码之前将您的需求发送给支持人员,它们确实有大量的功能,但配置可能非常棘手。

于 2013-02-03T02:28:27.050 回答