[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение функций
m4a1fox
Доброе утро уважаемые эксперты. Есть вот такая функция

function createPaginatorPost($total, $page)
{
$url = '<a id="dlet" class="dlet" href= ./page.php?ind='.(int)$_GET['ind'].'>&larr;|</a>';
$url_long = '<a id="dlet" class="dlet" href= ./page.php?ind='.(int)$_GET['ind'].'&page=';
$menu = '';
// Проверяем нужны ли стрелки назад
if ($page != 1)
$menu .= $url.$url_long.($page - 1).'>&larr;</a>';

if($page > 5)
$menu .= $url_long.($page - 5) .'>-5</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$menu .= $url_long.($page - 2).'>'.($page - 2).'</a>';

if($page - 1 > 0)
$menu .= $url_long.($page - 1).'>'.($page - 1).'</a>';

$menu .= '<div id="dlet" class="dlet_active">'.$page.'</div>';

if($page + 1 <= $total)
$menu .= $url_long.(int)($page + 1).'>'.($page + 1).'</a>';

if($page + 2 <= $total)
$menu .= $url_long.($page + 2).'>'.($page + 2).'</a>';

if($page + 5 <= $total)
$menu .= $url_long.(int)($page + 5).'>+5</a>';

// Проверяем нужны ли стрелки вперед
if ($page != $total)
$menu .= $url_long.($page + 1).'>&rarr;</a>'.$url_long.$total.'>|&rarr;</a>';

return $menu;
}

А есть еще и вот такая...

function createPaginatorComment($total, $page)
{
$url = '<a class="dlet" href= ./page_view_you_mail.php?view='.$_GET['view'].'>&larr;|</a> ';
$url_long = '<a class="dlet" href= ./page_view_you_mail.php?view='.$_GET['view'].'&page=';

$menu = '';
// Проверяем нужны ли стрелки назад
if ($page != 1)
$menu .= $url.$url_long.($page - 1).'>&larr;</a>';

if($page > 5)
$menu .= $url_long.($page - 5) .'>-5</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$menu .= $url_long.($page - 2).'>'.($page - 2).'</a>';

if($page - 1 > 0)
$menu .= $url_long.($page - 1).'>'.($page - 1).'</a>';

$menu .= '<div id="dlet" class="dlet_active">'.$page.'</div>';

if($page + 1 <= $total)
$menu .= $url_long.(int)($page + 1).'>'.($page + 1).'</a>';

if($page + 2 <= $total)
$menu .= $url_long.($page + 2).'>'.($page + 2).'</a>';

if($page + 5 <= $total)
$menu .= $url_long.(int)($page + 5).'>+5</a>';

// Проверяем нужны ли стрелки вперед
if ($page != $total)
$menu .= $url_long.($page + 1).'>&rarr;</a>'.$url_long.$total.'>|&rarr;</a>';

return $menu;
}


Собственно эти 2 функции отличаются только первыми 2 строками. А точнее переменными

$url
$url_long


Как можно объединить эти структуры? Спасибо...



Спустя 15 минут, 5 секунд (4.04.2011 - 10:00) kasichvadim написал(а):
Это как объединить?

Спустя 2 минуты, 31 секунда (4.04.2011 - 10:02) Trianon написал(а):
m4a1fox
переписать заново, написав именно тот код, который требуется.

(внутрь не глядел, в такой постановке задача решается независимо от кода.)

Спустя 3 минуты, 45 секунд (4.04.2011 - 10:06) m4a1fox написал(а):
Trianon
Интересно. Значит нельзя получается сделать что то общее... например функция в функции....

Спустя 1 час, 10 минут, 57 секунд (4.04.2011 - 11:17) Basili4 написал(а):
общее можно. Функции внутри других не объявить

Спустя 23 минуты, 38 секунд (4.04.2011 - 11:41) m4a1fox написал(а):
Basili4
Жаль! А так хотелось!

Спустя 18 минут, 43 секунды (4.04.2011 - 12:00) RAZZOR написал(а):
Так а почему бы не добавить третий параметр?
function createPaginatorComment($total, $page, $filename)
{
$url = '<a class="dlet" href= ./' . $filename . '?view='.$_GET['view'].'>&larr;|</a> ';
$url_long = '<a class="dlet" href= ./' . $filename . '?view='.$_GET['view'].'&page=';

$menu = '';
// Проверяем нужны ли стрелки назад
if ($page != 1)
$menu .= $url.$url_long.($page - 1).'>&larr;</a>';

if($page > 5)
$menu .= $url_long.($page - 5) .'>-5</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$menu .= $url_long.($page - 2).'>'.($page - 2).'</a>';

if($page - 1 > 0)
$menu .= $url_long.($page - 1).'>'.($page - 1).'</a>';

$menu .= '<div id="dlet" class="dlet_active">'.$page.'</div>';

if($page + 1 <= $total)
$menu .= $url_long.(int)($page + 1).'>'.($page + 1).'</a>';

if($page + 2 <= $total)
$menu .= $url_long.($page + 2).'>'.($page + 2).'</a>';

if($page + 5 <= $total)
$menu .= $url_long.(int)($page + 5).'>+5</a>';

// Проверяем нужны ли стрелки вперед
if ($page != $total)
$menu .= $url_long.($page + 1).'>&rarr;</a>'.$url_long.$total.'>|&rarr;</a>';

return $menu;
}
И потом назначать $filename либо page.php, либо page_view_you_mail.php в зависимости от ситуации. В чём пролема-то ?

Спустя 11 минут, 38 секунд (4.04.2011 - 12:11) RAZZOR написал(а):
Или даже лучше так:
function createPaginator($total, $page, $filename = 'page_view_you_mail')
{
$url = '<a class="dlet" href= ./' . $filename . '.php?view='.$_GET['view'].'>&larr;|</a> ';
$url_long = '<a class="dlet" href= ./' . $filename . '.php?view='.$_GET['view'].'&page=';

Теперь, если вы при вызове функции не указываете третий параметр - будет как в createPaginatorComment, если указываете 'page', то будет как в createPaginatorPost, если укажете что-нибудь другое, то будет херня, но можно сделать лишнюю проверку.
$filename = ($filename != 'page_view_you_mail') ? 'page' : 'page_view_you_mail';

Спустя 1 час, 43 минуты, 3 секунды (4.04.2011 - 13:54) m4a1fox написал(а):
RAZZOR
Спасибо. Сейчас попробую...
Но собственно интересовала такая возможность, что избавиться от этого

$menu = '';
// Проверяем нужны ли стрелки назад
if ($page != 1)
$menu .= $url.$url_long.($page - 1).'>&larr;</a>';

if($page > 5)
$menu .= $url_long.($page - 5) .'>-5</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$menu .= $url_long.($page - 2).'>'.($page - 2).'</a>';

if($page - 1 > 0)
$menu .= $url_long.($page - 1).'>'.($page - 1).'</a>';

$menu .= '<div id="dlet" class="dlet_active">'.$page.'</div>';

if($page + 1 <= $total)
$menu .= $url_long.(int)($page + 1).'>'.($page + 1).'</a>';

if($page + 2 <= $total)
$menu .= $url_long.($page + 2).'>'.($page + 2).'</a>';

if($page + 5 <= $total)
$menu .= $url_long.(int)($page + 5).'>+5</a>';

// Проверяем нужны ли стрелки вперед
if ($page != $total)
$menu .= $url_long.($page + 1).'>&rarr;</a>'.$url_long.$total.'>|&rarr;</a>';

return $menu;

Так как он у меня повторяется... Насколько понял Ваш вариант все равно предполагает, что я буду использовать код выше 2 раза...

Спустя 8 часов, 53 минуты, 26 секунд (4.04.2011 - 22:48) RAZZOR написал(а):
Мой вариант вариант предполагал, что у Вы теперь можете удалить две свои функции и использовать одну мою. Я так понял вы именного этого добивались. Вот вам итоговый вариант со всеми правками
function createPaginator($total, $page, $what = false)
{
$filename = $what ? 'page' : 'page_view_you_mail';
$url = '<a class="dlet" href= ./' . $filename . '.php?view='.$_GET['view'].'>&larr;|</a> ';
$url_long = '<a class="dlet" href= ./' . $filename . '.php?view='.$_GET['view'].'&page=';

$menu = '';
// Проверяем нужны ли стрелки назад
if ($page != 1)
$menu .= $url.$url_long.($page - 1).'>&larr;</a>';

if($page > 5)
$menu .= $url_long.($page - 5) .'>-5</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$menu .= $url_long.($page - 2).'>'.($page - 2).'</a>';

if($page - 1 > 0)
$menu .= $url_long.($page - 1).'>'.($page - 1).'</a>';

$menu .= '<div id="dlet" class="dlet_active">'.$page.'</div>';

if($page + 1 <= $total)
$menu .= $url_long.(int)($page + 1).'>'.($page + 1).'</a>';

if($page + 2 <= $total)
$menu .= $url_long.($page + 2).'>'.($page + 2).'</a>';

if($page + 5 <= $total)
$menu .= $url_long.(int)($page + 5).'>+5</a>';

// Проверяем нужны ли стрелки вперед
if ($page != $total)
$menu .= $url_long.($page + 1).'>&rarr;</a>'.$url_long.$total.'>|&rarr;</a>';

return $menu;
}
Там, где вы вызывали свою первую функцию, вызываете мою, задавая третий параметр true.
Например $menu = createPaginator(первая_переменная, вторая_переменная, true);. Там где вторую - вызываете её же, но пропускаете третий параметр. Функция автоматически подставит false и вернёт нужный результат.

Вы этого добивались?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.