Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Табы (вкладки) на странице сайта
 
 автор: Ruthless   (22.08.2014 в 11:34)   письмо автору
 
 

Здравствуйте. Господа гуру, подскажите пожалуйста, как можно сделать табы на странице сайта, чтобы были такие же вкладки как в Опере или в Файерфоксе? Пробовал делать во взаимодействии с MySQL, работает очень медленно. Сейчас посетила мысль использовать сессии, но появилось очень много вопросов. Я конечно понимаю, что лучше для этих целей подойдет javascript, но я в нем как свинья в апельсинах. Позвольте мне описать свои хотелки. Имеем ряд ссылок, при нажатии на которые под ними появляются вкладки (табы), так вот, как доходит количество вкладок до количества 5, должна появляться стрелка вправо, которая позволяет перескакивать на следующие 5 вкладок, а тут уже должна появиться стрелка влево.
Вот такой код у меня получился, а вот как интегрировать сюда стрелки вправо и влево, увы не знаю. И еще, владки у меня открываются по порядку их расположения, а должны открываться в зависимости от их вызова. Заранее спасибо.

<?php
session_start
();
require_once (
'config.inc.php');
$url str_replace('/12.php?',''$_SERVER['REQUEST_URI']);

    echo 
"<a href='12.php?str=1'>Пользователи</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=2'>Настройки доступа</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=3'>Профиль</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=4'>Справочник должностей</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=5'>Справочник отделов</a>";

    echo 
"<br>";

    echo 
"<a href='12.php?str=6'>База регистрации договоров</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=7'>База канцелярии</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=8'>База претензионного отдела</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=9'>База искового отдела</a>&nbsp;&nbsp;&nbsp;";
    echo 
"<a href='12.php?str=10'>База клиентов</a>";

    echo 
"<br><br>";
    
    
$_SESSION['str'][0]="&nbsp;"
    
$_SESSION['name'][0]="&nbsp;";

    if (
$_GET['str']==1$_SESSION['str'][1]="str=1"$_SESSION['name'][1]="Пользователи";
    if (
$_GET['str']==2$_SESSION['str'][2]="str=2"$_SESSION['name'][2]="Настройки доступа";
    if (
$_GET['str']==3$_SESSION['str'][3]="str=3"$_SESSION['name'][3]="Профиль";
    if (
$_GET['str']==4$_SESSION['str'][4]="str=4"$_SESSION['name'][4]="Справочник должностей";
    if (
$_GET['str']==5$_SESSION['str'][5]="str=5"$_SESSION['name'][5]="Справочник отделов";
    if (
$_GET['str']==6$_SESSION['str'][6]="str=6"$_SESSION['name'][6]="База регистрации договоров";
    if (
$_GET['str']==7$_SESSION['str'][7]="str=7"$_SESSION['name'][7]="База канцелярии";
    if (
$_GET['str']==8$_SESSION['str'][8]="str=8"$_SESSION['name'][8]="База претензионного отдела";
    if (
$_GET['str']==9$_SESSION['str'][9]="str=9"$_SESSION['name'][9]="База искового отдела";
    if (
$_GET['str']==10$_SESSION['str'][10]="str=10"$_SESSION['name'][10]="База клиентов";

    if (
$_GET['del']==1) unset($_SESSION['str'][1]);
    if (
$_GET['del']==2) unset($_SESSION['str'][2]);
    if (
$_GET['del']==3) unset($_SESSION['str'][3]);
    if (
$_GET['del']==4) unset($_SESSION['str'][4]);
    if (
$_GET['del']==5) unset($_SESSION['str'][5]);
    if (
$_GET['del']==6) unset($_SESSION['str'][6]);
    if (
$_GET['del']==7) unset($_SESSION['str'][7]);
    if (
$_GET['del']==8) unset($_SESSION['str'][8]);
    if (
$_GET['del']==9) unset($_SESSION['str'][9]);
    if (
$_GET['del']==10) unset($_SESSION['str'][10]);


    echo 
"<table>";
    echo 
"<tr>";

    for (
$i=1$i<=10$i++) {
                              
    if (
$_SESSION['str'][$i]==$url$bg="bgcolor='#CCCCCC'";
    else  
$bg="bgcolor='#FFFFFF'";

    if (
$_SESSION['str'][$i]!="" AND $i<=5) echo "<td class='test_menu' $bg>&nbsp;<a href='12.php?".$_SESSION['str'][$i]."'>".$_SESSION['name'][$i]."</a> <sup><a href='12.php?del=$i'>x</a></sup>&nbsp;</td>";
    }
    echo 
"</tr>";
    echo 
"</table>";
?>

  Ответить  
 
 автор: confirm   (22.08.2014 в 11:54)   письмо автору
 
   для: Ruthless   (22.08.2014 в 11:34)
 

Этого кошмара вообще не надо, тем более в таком написании.
Вы собственно хотите иметь типа меню, которое работает по принципу построчной навигации. Вкладки имеют ссылки, которые вызывают определенную страницу, это и есть содержимое вкладки.
По большому счету JS вообще не требуется для этого, можно решить все только на CSS. Но можно подключить и JS для эффектов.
Ищите в сети "горизонтальные меню", вам нужно выбрать те, что не имеют ветвей (хотя это опционально, так что не страшно). А меню в виде табулятора множество.
Выбирайте нужное, формируйте его (по ресурсам, а не таким извращенным способом), с учетом постраничного вывода (по пять на странице).

  Ответить  
 
 автор: Ruthless   (22.08.2014 в 12:07)   письмо автору
 
   для: confirm   (22.08.2014 в 11:54)
 

Да, таких меню полно, но вот чтобы была горизонтальная прокрутка, нашел только одно такое. В примере оно работает, а вот сам скрипт почему то не работает. И опять же, чтобы существующий скрипт переделать, нужно хоть как-то дружить с javascript, но увы я с ним ну никак...
Спасибо Вам за ответ.

  Ответить  
 
 автор: confirm   (22.08.2014 в 12:44)   письмо автору
 
   для: Ruthless   (22.08.2014 в 12:07)
 

Придется подружиться, а прокрутка, это смотря какая - если все меню (все табуляторы) отдается сразу, и просто то, что более 5 скрыто, значит управлять JS. Если это это типа в постраничной навигации стрелки, которые делают запрос к серверу за очередной порцией, то никакого JS не требуется.
Так что выбирайте, а то, что у вас написано, это выкидывать, однозначно.

  Ответить  
 
 автор: Ruthless   (22.08.2014 в 13:23)   письмо автору
 
   для: confirm   (22.08.2014 в 12:44)
 

Эх, если бы это была постраничная навигация, не было бы проблем. Вся засада в том, что тут должны появляться вкладки по нажатию в верхнем меню, а так же удаляться при нажатии на крестик. Вот как в этом примере http://www.webdex.ru/test/ .

  Ответить  
 
 автор: confirm   (22.08.2014 в 13:33)   письмо автору
 
   для: Ruthless   (22.08.2014 в 13:23)
 

Что значит появляться - список всех возможных вкладок всегда есть на странице и выбором по нему открывать вкладку? А зачем, не проще ли сразу иметь вкладки?
А стрелочки для сдвига, это если отображаемое меню небольшое, иначе это слишком прокручивать длинную ленту. К тому же если удалять, то зачем вообще прокрутка?

  Ответить  
 
 автор: Ruthless   (22.08.2014 в 13:41)   письмо автору
 
   для: confirm   (22.08.2014 в 13:33)
 

Вот так мой знакомый товарищ заморочился. Мои предложения сделать элементарное выподающее меню слышать не хочет. После чего я весь интернет перерыл и не нашел ничего подобного. Решил спросить тут, на уважаемом мною форуме. Неужто это нельзя никак реализовать....

  Ответить  
 
 автор: confirm   (22.08.2014 в 14:35)   письмо автору
 
   для: Ruthless   (22.08.2014 в 13:41)
 

А что реализовать то?
Я задал вопрос - заголовки создаваемых закладок всегда есть на страницах?
Если да, к чему это все?
Если взять браузер, в котором вы смотрите нечто и выбирая ссылку, открываете ее содержимое в новой вкладке. Все логично.
А где логика в том, что вы показываете? Если это ограниченное количество ресурсов, не знаю что это на самом деле, пусть будут разделы сайта, то зачем эта кухня? Ну создавайте сразу вкладки, зачем их предварительно выбирать в каком-то списке? Охота стрелочек потому что вкладки сразу все не помещаются на странице, это не проблема, но опять таки "не безразмерное" их количество должно быть, иначе...

Это если меню и закладки как элемент дизайна меню, не более, а содержимое каждой закладки, это новый запрос сервера.

А если действительно работа закладок, так табулятор загружает все содержимое, просто отображается содержимое только выбранной закладки, остальное скрыто.

А что вы со своим знакомым хотите сделать, заморачиваясь таким образом, я не знаю. Может лучше начать с описания что это?

  Ответить  
 
 автор: Ruthless   (22.08.2014 в 14:51)   письмо автору
 
   для: confirm   (22.08.2014 в 14:35)
 

Это административная панель для его конторки, где люди могут меняться постоянно. Вот он и заморочился на этом якобы простом варианте для тетенек... Похоже все таки, исходя из беседы с Вами и покопав просторы сети интернет, пойду я изучать Javascript. Может что и выйдет. Спасибо Вам.

  Ответить  
 
 автор: confirm   (22.08.2014 в 15:38)   письмо автору
 
   для: Ruthless   (22.08.2014 в 14:51)
 

Нет не выйдет, если речь идет об админке и ее конфигурации под определенных пользователей, если я правильно понял.
Во-первых конфигурацию необходимых панелей (закладок), а вернее в данном случае разделов, с которыми разрешено работать конкретному пользователю, нужно хранить не в сессии, а в базе.
Во-вторых закладки эти выводятся сразу для пользователя, согласно разрешения в базе.
В третьих, если уж и собирать такой пазл, то закладки (разделы) лучше выбирать в списке, значениями которого служат id этих разделов, которые в итоге и записываются в базу как конфигурация для указанного id пользователя.

  Ответить  
 
 автор: Ruthless   (22.08.2014 в 15:48)   письмо автору
 
   для: confirm   (22.08.2014 в 15:38)
 

Первоначально я так и сделал, все id хранятся в MySQL. Я почему засомневался, данный вариант уж больно медленно работает.

  Ответить  
 
 автор: confirm   (22.08.2014 в 16:49)   письмо автору
 
   для: Ruthless   (22.08.2014 в 15:48)
 

Ну если и заниматься таким "извратом", то вот этого:

$_SESSION['str'][0]="&nbsp;";
$_SESSION['name'][0]="&nbsp;";

if ($_GET['str']==1) $_SESSION['str'][1]="str=1"; $_SESSION['name'][1]="Пользователи";
.....

if ($_GET['del']==1) unset($_SESSION['str'][1]);
.....

вообще не должно быть. Есть массивы, и сессия должна содержать массив описывающий набор, а текущее в наборе, это то что пришло запросом и найдено как ключ в этом массиве.

Но это лишено всякого смысла. Ваш знакомый должен видеть в админке список пользователей, и сделать выбор из списка для конкретного пользователя. Этот выбор и записать в базу. Все, что тут мудрить и усложнять, красота нужна?

Красота уж если нужна, в виде закладок, так это уже у пользователя (тетенек), которые работают с разделами. А работают они с ними надо полагать тоже в админке. Так хочется закладки, на здоровье. Вот только тасовать их к чему, если пользователю их определяет администратор? Да и это еще смотря какой объем данных, имеется в виду сложность структуры их, а это и вывод общего списка, групповое/индивидуальное редактирование, добавление параметров, характеристик и прочего, ... И если это так, то закладки в таком случае, это бельмо на глазу, ибо не удобно.

  Ответить  
 
 автор: Ruthless   (25.08.2014 в 10:15)   письмо автору
 
   для: confirm   (22.08.2014 в 16:49)
 

Да, я с Вами полностью согласен, что это лишнее. Просто это черновой вариант, еще не причесанный. Это все нужно, насколько я понял, для красоты и простого взаимодействия. А для тетенек количество закладок всегда будет одинаковым, т.е. администратор не будет их органичивать кому-либо.

  Ответить  
 
 автор: confirm   (25.08.2014 в 10:22)   письмо автору
 
   для: Ruthless   (25.08.2014 в 10:15)
 

С чем согласны - не нужной красотой или неудобством?
В админке нужна не красота, а максимум функциональности. Вы убухаете попусту время на макияж, а в итоге окажется, что расчесаться будет не возможно.

  Ответить  
 
 автор: Ruthless   (25.08.2014 в 15:49)   письмо автору
 
   для: confirm   (25.08.2014 в 10:22)
 

Согласен относительно не нужной красоты, да и удобство в таком варианте относительное. В данном случае меня другое удручает, неужто это настолько невыполнимая задача? PHP+MySQL отпадает (жуткие тормоза), а вот PHP+Javascript или PHP+CSS должны же наверное какой то результат дать? Конечно Javascript для меня это дремучий лес, но как я писал выше, похоже пора садиться за книжки...

  Ответить  
 
 автор: confirm   (25.08.2014 в 16:22)   письмо автору
 
   для: Ruthless   (25.08.2014 в 15:49)
 

Вы на свой РНР-код посмотрите, ну разве же так задачи решают. Если таким образом писать, то ожидать чего-то хорошего и не стоит.
Но всякие крутилки и прочие навороты на клиенте, это не забота сервера, это прерогатива JavaScript. Написать код управления закладками на нем, это простая задача. Не можете ее решить, берите готовый, тем более, что есть простые, а не под монстров типа jQueryUI, чего вам предлагали.

Вопрос не в этом. Главный вопрос, это что из себя представляет структура данных, которой будет управлять административный раздел, это и будут определять его интерфейс. И если явно вкладки для этого будут не удобны, то стремление их сделать, это пустая трата времени.

  Ответить  
 
 автор: Ruthless   (25.08.2014 в 16:39)   письмо автору
 
   для: confirm   (25.08.2014 в 16:22)
 

Уважаемый confirm я все понял. Действительно, пусть не сервер трудится на клиента, а сам клиент работает на себя. Javascript мне вруки. Спасибо Вам большое за разъяснения и что не оставили без внимания.

  Ответить  
 
 автор: Commander   (22.08.2014 в 17:37)   письмо автору
 
   для: Ruthless   (22.08.2014 в 11:34)
 

Типа этого?

  Ответить  
 
 автор: Ruthless   (25.08.2014 в 10:17)   письмо автору
 
   для: Commander   (22.08.2014 в 17:37)
 

Да, типа этого, только нужна еще прокрутка и возможность удалять и по ссылке добавлять вкладки.

  Ответить  
 
 автор: Commander   (25.08.2014 в 13:47)   письмо автору
 
   для: Ruthless   (25.08.2014 в 10:17)
 

На тему прокрутки не знаю, а вот добавлять вкладки в jQueryUI можно

  Ответить  
 
 автор: Ruthless   (25.08.2014 в 15:50)   письмо автору
 
   для: Commander   (25.08.2014 в 13:47)
 

Увы, эта самая прокрутка, тоже нужна :(

  Ответить  
 
 автор: moonfox   (25.08.2014 в 21:25)   письмо автору
 
   для: Commander   (25.08.2014 в 13:47)
 

элементарно и без jQueryUI делаются табы)
напрягает лишний js и куча левого css с этими всеми примочками.

  Ответить  
 
 автор: Commander   (26.08.2014 в 04:58)   письмо автору
 
   для: moonfox   (25.08.2014 в 21:25)
 

Зачастую требуется целая куча эффектов. В этом случае проще всего подключить одну тяжелую библиотеку, чем кучу мелких (которые к тому же иногда рассчитаны на древние версии jQuery).

  Ответить  
 
 автор: confirm   (26.08.2014 в 08:48)   письмо автору
 
   для: Commander   (26.08.2014 в 04:58)
 

Не городите, что зачастую...
Даже jOuery последний в свете HTML5 и нововведений ECMA теперь можно собрать под свои нужны, и так изначально бы надо было поступить, ибо из него вы даже не всегда 50% используете.

  Ответить  
 
 автор: Commander   (26.08.2014 в 18:59)   письмо автору
 
   для: confirm   (26.08.2014 в 08:48)
 

Не городите, что зачастую...

Не городите... Попробуйте найти новоиспеченный сайт, где не было бы десятка JS-библиотек

  Ответить  
 
 автор: confirm   (26.08.2014 в 19:38)   письмо автору
 
   для: Commander   (26.08.2014 в 18:59)
 

С дури можно и сотню подцепить, так что это не аргумент.

  Ответить  
 
 автор: moonfox   (27.08.2014 в 01:28)   письмо автору
 
   для: Commander   (26.08.2014 в 18:59)
 

то что там используется - результат тупости
реально даже подключая целую 1 библиотеку jq
можно получить все то что делают кучи хрени.
и на практике не так уж и сложно, по крайней мере один раз написать для себя.

до недавнего времени использовал UI для табов и для аккордеона...
на практике вышло около 15-20 строк кода для аккордеона и строк 6 для табов в js

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования