How to get distance between two points

This chunk of code is taken form http://www.phpro.org/tutorials/Geo-Targetting-With-PHP-And-MySQL.html

The function below is really useful to calculate the distance between two points by latitude and longitude:

/**
 * Get distance from latitude and longitute
 *
 * @param float $lat_from
 * @param float $long_from
 * @param float $lat_to
 * @param float *long_to
 * @param $unit options k, m, n, Default k
 *
 * @return float
 */
function getRiemannDistance($lat_from, $long_from, $lat_to, $long_to, $unit='k'){
	switch ($unit){
		case 'm':	/* miles */
			$unit = 3963;
			break;
		case 'n':	/* nautical miles */
			$unit = 3444;
			break;
		default:	/* kilometers */
			$unit = 6371;
	}

	/*** 1 degree = 0.017453292519943 radius ***/
	$degreeRadius = deg2rad(1);

	/*** convert longitude and latitude to radians ***/
	$lat_from  *= $degreeRadius;
	$long_from *= $degreeRadius;
	$lat_to    *= $degreeRadius;
	$long_to   *= $degreeRadius;

	/*** apply the Great Circle Distance Formula ***/
	$dist = sin($lat_from) * sin($lat_to) + cos($lat_from)
	* cos($lat_to) * cos($long_from - $long_to);

	/*** radius of earth * arc cosine ***/
	return ($unit * acos($dist));
}
Annunci
Contrassegnato da tag , , , ,

How to add a join relationship in views query alter

This post is a personal reminder for a task not so easy to do: add a join in hook_views_query_alter.

So that’s the solution I’ve found for Drupal 7:

/**
 * Implements hook_views_query_alter().
 */
function mymodule_views_query_alter(&$view, &$query) {
	if ($view->name == 'my_view_machine_name') {
		$join = new views_join();
		$join->construct('my_table_name', 'left_table_name', 'left_table_field_name', 'my_table_field_name');
		$query->add_relationship('my_table_alias', $join, 'my_table_name');
	}
}

And this is an example with real variables:

/**
 * Implements hook_views_query_alter().
 */
function mymodule_views_query_alter(&$view, &$query) {
	if ($view->name == 'authors_view') {
		$join = new views_join();
		$join->construct('users', 'node', 'uid', 'uid');
		$query->add_relationship('authors', $join, 'users');
	}
}
Contrassegnato da tag , ,

Basta con gli escape nelle espressioni regolari!

Ciao a tutti, una domanda: ma non vi siete stancati di fare l’escape degli slash all’interno del pattern di una regex?
Beh per risolvere questo “fastidio” basta sostituire gli slash di inizio e fine pattern con un bel pipe.

Detto in codice semplice, invece di:

preg_match("/trova\/(questa)\/cosa/", $var, $matches);

faremo così:

preg_match("|trova/(questa)/cosa|", $var, $matches);

 

Provare per credere 😉

Bell@

Come modificare il numero dei risultati della ricerca in Drupal 7

Se qualcuno di voi avesse necessità di modificare il numero di risultati che vengono mostrati nella pagina di ricerca in Drupal 7 sappiate che potete farlo facilmente implementando, all’interno di un vostro modulo, l’hook_query_alter.

/**
 *Implementation of hook_query_alter().
 */
function miomodulo_query_alter(QueryAlterableInterface $query){
    if(is_a($query, 'PagerDefault')){
        $tables = $query->getTables();
        if((!empty($tables['i'])) && ($tables['i']['table'] == 'search_index'))
            $query->limit(20);
    }
}

dove 20 è il numero di risultati che verranno mostrati, piuttosto che 10 che è il valore di default scritto all’interno del codice core di Drupal 7 (vedi hook_search_execute() e node_search_execute()).

Magari al posto di scrivere direttamente il numero all’interno della funzione potreste richiamare una variabile custom tipo:

variable_get(‘custom_search_results’, 10);

Bell@

Contrassegnato da tag ,
%d blogger hanno fatto clic su Mi Piace per questo: