在我的网络中编辑显示价格的方式

时间:2012-11-19 12:44:26

标签: php joomla

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

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);
}

2 个答案:

答案 0 :(得分:0)

为什么这段代码很糟糕,为什么我不能使用它?它来自Jomres预订系统,,, 是的,开发者告诉我编辑这条线为什么? 是难以理解和混淆代码,还是有很多快捷方式?

答案 1 :(得分:0)

您需要修改的行是:

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

并在日期中添加一个月

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

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

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

  • 嵌套ifs使其不可读,有4级嵌套ifs甚至包含几个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. 手臂和腿都不花钱。
  6. 确保在编写新代码之前将需求发送到支持,它们确实具有大量功能,但配置可能非常棘手。