2

I am slowly getting my head around PHP but being self taught, it is taking a while :p

Anyway... I have installed the SP Weather module but have come across a problem. I would like to display the wind speed in MPH but the temperature in celcius.

The module only allows you to select imperial or metric for all settings so I can't, without editing the code, adapt it to do what I want it to do.

I've had a look in the code but need some help. Does anyone know how I can do this? Code is below.

Kind regards

James

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

$location   = (trim($params->get('locationTranslated'))=='') ? $params->get('location') : $params->get('locationTranslated');
$forecast = $data['forecast'];
$data = $data['query']['results']['rss']['channel'];

?>
<div id="weather_sp1_id<?php echo $moduleID; ?>" class="weather_sp1">

    <div class="weather_sp1_c">
        <div class="weather_sp1_cleft">

            <img class="spw_icon_big" src="<?php echo  $helper->icon( $data['item']['condition']['code'] ) ?>" title="<?php 
            echo $helper->txt2lng($data['item']['condition']['text']);
            ?>" alt="<?php echo $helper->txt2lng($data['item']['condition']['text']); ?>" />

            <br style="clear:both" />
            <p class="spw_current_temp">
                <?php if ($params->get('tempUnit')=='f') { ?>
                <?php echo  $data['item']['condition']['temp']. JText::_('SP_WEATHER_F'); ?>   
                <?php } else { ?>
                <?php echo $data['item']['condition']['temp']. JText::_('SP_WEATHER_C'); ?>
                <?php } ?>
            </p>
        </div>

        <div class="weather_sp1_cright">
            <?php if($params->get('city')==1) { ?>
            <p class="weather_sp1_city"><?php echo $location ?></p> 
            <?php } ?>

            <?php if($params->get('condition')==1) { ?>
            <div class="spw_row"><?php
            echo $helper->txt2lng($data['item']['condition']['text']); ?></div>
            <?php } ?>

            <?php if($params->get('humidity')==1) { ?>
            <div class="spw_row"><?php echo JText::_('SP_WEATHER_HUMIDITY');  ?>: <?php echo $helper->Numeric2Lang($data['atmosphere']['humidity']); ?>%</div>
            <?php } ?>

            <?php if($params->get('wind')==1) { ?>
            <div class="spw_row"><?php echo JText::_('SP_WEATHER_WIND');  ?>: <?php 

            $compass = array('N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N');

            $data['wind']['direction'] = $compass[round($data['wind']['direction'] / 22.5)];

            echo JText::_($data['wind']['direction']) . JText::_('SP_WEATHER_AT') . $helper->Numeric2Lang($data['wind']['speed']) . ' ' . JText::_(strtoupper($data['units']['speed'])); ?></div>
            <?php } ?>
        </div>
        <div style="clear:both"></div>      
    </div>

    <div style="clear:both"></div>
    <?php if ($params->get('forecast')!='disabled') { ?>
    <div class="weather_sp1_forecasts">
        <?php

        $fcast = (int) $params->get('forecast');
        $j = 1;
        unset($forecast[0]);

        foreach($forecast as $i=>$value )
        { 

            if($fcast<$j) break;

            if ($params->get('tmpl_layout')=='list') { ?>
            <div class="list_<?php echo ($i%2 ? 'even' : 'odd') ?>">
                <span class="weather_sp1_list_day"><?php 
                echo $helper->txt2lng($value['day']); ?></span>
                <span class="weather_sp1_list_temp"><?php 
                echo $helper->convertUnit( $value['low'], $data['units']['temperature']) . '&nbsp;' . $params->get('separator') . '&nbsp;' . $helper->convertUnit( $value['high'], $data['units']['temperature']); ?></span>
                <span class="weather_sp1_list_icon"><img class="spw_icon" src="<?php 

                echo $helper->icon( $value['code'] ); ?>" align="right" title="<?php

                echo $helper->txt2lng( $value['text'] );

                ?>" alt="<?php    echo $helper->txt2lng($value['text']); ?>" /></span>
                <div style="clear:both"></div>
            </div>            
            <?php } else { ?> 
            <div class="block_<?php echo ($i%2 ? 'even' : 'odd') ?>" style="float:left;width:<?php echo round(100/$fcast) ?>%">
                <span class="weather_sp1_day"><?php 
                echo $helper->txt2lng($value['day']); ?></span>
                <br style="clear:both" />
                <span class="weather_sp1_icon"><img  class="spw_icon" src="<?php echo $helper->icon( $value['code'] ); ?>" title="<?php 
                echo $helper->txt2lng($value['text']);
                ?>" alt="<?php 
                echo $helper->txt2lng($value['text']);
                ?>" />
            </span><br style="clear:both" />
            <span class="weather_sp1_temp"><?php 
            echo $helper->convertUnit( $value['low'], $data['units']['temperature']) . '&nbsp;' . $params->get('separator') . '&nbsp;' . $helper->convertUnit( $value['high'], $data['units']['temperature']);
            ?></span>
            <br style="clear:both" />
        </div>
        <?php } ?>
        <?php

        $j++;
    } ?>
</div>
<?php } ?>

<div style="clear:both"></div>

1 Answer 1

4

It looks like this is because the unit parameter is actually passed to the web service (Yahoo?) that is used to get the data. You might want to just do the conversion yourself.

echo JText::_($data['wind']['direction']) . JText::_('SP_WEATHER_AT') . $helper->Numeric2Lang($data['wind']['speed']) . ' ' . JText::_(strtoupper($data['units']['speed'])); ?></div>

Is the line you need to edit I think. Replace "' ' . JText::_(strtoupper($data['units']['speed']))" with ' MPH' to print your unit. Then replace "$data['wind']['speed']" with "round($data['wind']['speed']/1.6)".

Now if you set it to celsius it should show speed in mph. Not tested so typos in code are likely, but the idea should work.

1
  • Excellent, that did it! Thank you very much for your help, what a hero! :0)
    – favdes
    Commented Apr 13, 2015 at 9:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.