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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: правая кнопка

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: Alexx   (27.12.2005 в 22:23)   письмо автору
 
   для: 12345   (27.12.2005 в 21:49)
 

у вас есть ICQ или что-нибудь через что можно поговрить онлайн ?

   
 
 автор: 12345   (27.12.2005 в 21:49)   письмо автору
 
   для: Alexx   (27.12.2005 в 21:28)
 

Но этого вполне достаточно, чтобы делать и смотреть в документацию.
Свои разделы - это в смысле разные ссылки для разных статей (слоёв)? Я действительно не понимаю сути задачи, в частности, почему ссылки нужны, а формировать страницу из пхп не нужно, и насколько разные ссылки нужны. Но, в общем, смотрите на участки кодов:

    if(cMenus[i]=='New'){ var ww='http://www.xxx.ru/?news_';var vN=t.id.substring(cMenus[i].length); 
        d.getElementById('nameNews1').href=ww+'edit='+vN; 
        d.getElementById('nameNews2').href=ww+'delete='+vN; 
    }     //только здесь формируются ссылки меню. Если сюда подставить выбор ссылки
          //   из массива по vN, то, как я понимаю, это то, что требуется

Правильно ли я понял задачу? Если да, то для 2 меню (id=New0 и id=New1)

menuEd=["http://www.xxx.ru/ed0.php?edit=0","http://www.xxx.ru/edit1.php?editOther=1"];  //определение массива
menuDel=[   ,   ]; //(пишется аналогично)
    if(cMenus[i]=='New'){ var ww='http://www.xxx.ru/?';var vN=t.id.substring(cMenus[i].length); 
        d.getElementById('nameNews1').href=menuEd[vN]
        d.getElementById('nameNews2').href=menuDel[vN]
    } 

   
 
 автор: Alexx   (27.12.2005 в 21:28)   письмо автору
 
   для: 12345   (27.12.2005 в 20:32)
 

Задействовать БД или что ещё не нужно нужно только одно при выборе опции перейти по ссылке. Я JavaScript не учил и половину того что вы написали ели ели понял . А то что вы сказали ели ели представляю как сделать. Можно код привести только двух меню где задаются свои разделы и всё. Заранее спасибо

   
 
 автор: 12345   (27.12.2005 в 20:32)   письмо автору
 
   для: Alexx   (27.12.2005 в 20:12)
 

Пример лучше написать Вам, так как знаете, что требуется от задачи. К примеру, для одних статей делаете меню Редактировать-Удалить, а к другим - Редактировать-Удалить-Комментировать. И пути к скриптам, скажем, различные. Придумываем структуру описания шаблона. Например, 3 записи. Если пустая, то пункт меню отсутствует, если нет, то содержит путь скрипта обработки. В БД создаёте таблицу из записей вида ("editNews.php?","deleteNews.php?","") , ("editNews.php?", "deleteNews.php?", "addComment.php?") . А когда возникнет мелкий вопрос типа как сделать строку невидимой в меню, тогда вспомните слова style.display и ответ найдётся (в Яндексе) :) Я бы сам так делал.

   
 
 автор: Alexx   (27.12.2005 в 20:12)   письмо автору
 
   для: 12345   (27.12.2005 в 17:51)
 

>Если на каждую статью надо своё меню, делаете массив с параметрами меню (вплоть до >сокрытия пунктов меню свойством .style.display) и пользуетесь одним и тем же шаблоном.

можно на примере? Заранее спасибо

   
 
 автор: 12345   (27.12.2005 в 17:51)   письмо автору
 
   для: Alexx   (27.12.2005 в 16:38)
 

Как я понял, надо не новое меню, а другие ссылки? В примере я формировал ссылки в зависимости от номера. Если на каждую статью надо своё меню, делаете массив с параметрами меню (вплоть до сокрытия пунктов меню свойством .style.display) и пользуетесь одним и тем же шаблоном. Ничего не мешает и шаблон выбирать в зависимости от параметров в массиве (массив массивов, видимо, придётся делать, заполняемый через php). А можно и XML-структуру, которую хранить на сервере или генерируемую тем же php из БД.

Шаблон, конечно, можно и генерировать по DOM каждый раз, но это лишнее.

   
 
 автор: Alexx   (27.12.2005 в 16:38)   письмо автору
 
   для: 12345   (27.12.2005 в 00:34)
 

Всё работает :) Спасибо

Как добавлять пункты в меню понятно. А как можно создать новое меню ? С таким возможностями допусти Cоздать Удалить? а ссылки должны вести на ?... &del=1 или ? .. &new=1 Где new=1 определяем нажимая на нужную ссылкую Принцип как я понял один и тот же только как сделать чтобы были разные меню ?

   
 
 автор: 12345   (27.12.2005 в 14:47)   письмо автору
 
   для: Alexx   (27.12.2005 в 13:14)
 

Убрать <div id=nameNews></div>
и d.getElementById('nameNews').innerHTML=t.id;
, и #nameNews{width:100;background:white;}
, и if(isOpera)d.getElementById('nameNews').style.width=96;

   
 
 автор: Alexx   (27.12.2005 в 13:14)   письмо автору
 
   для: 12345   (27.12.2005 в 00:34)
 

12345 Огромное спасибо. Как убрать первый пункт меню где показывает New1, New2 ? А оставить просто редатировать и удалить?

   
 
 автор: 12345   (27.12.2005 в 00:34)   письмо автору
 
   для: Alexx   (26.12.2005 в 22:55)
 

Можно с 4 -мя ;) Сделал объединение того и другого методов, чтобы работа демонстрационная зря не пропадала и было больше пищи для примеров :)
<? ><title>Демо контекстного меню по правой кнопке мыши (IE,FF), Опера7.54 по левой</title><style>.cMenu{position:absolute;visibility:hidden;
        
width:120padding:2pxz-index:5border:1px solid black;}
    .
cMenu a{color:blacktext-decoration:none;display:block;}
    .
cMenu a:hover {background:#00468a; color:white;}
    #cMenuAll{background:#c0f0f0;}
    #cMenuNws{background:#f0f0c0;}
    #cMenuNew{width:100;background:#f0c0f0;}
    #nameNews{width:100;background:white;}
    #Nws{background-color:paleturquoise;}
    #All{background-color:moccasin;}
    #New1,#New2,#New3,#New4{border:dotted 1px #ccbbaa;padding:0 4;}
    
pre{padding:2 4;margin:0;}
    
table,td{padding:0;border-collapse:collapse;}
</
style>

<
script>d=document;    isOpera=self.opera;
d.oncontextmenu=function(e){if(!isOpera&&!d.all)event=e;var o=d.all?event.srcElement:event.target;
    while(
o){
        for(var 
i=0;i<cMenus.length;i++){
            if(
o.id.substring(0,cMenus[i].length)==cMenus[i])break;
        }if(
i<cMenus.length)break;
        
o=o.offsetParent;
    }if(
o)cMenu(o,i);else cMenuOff();
    
event.returnValue=!1;
}
d.onclick=function(e){if(isOpera)d.oncontextmenu();else cMenuOff();}
cMenus=['All','Nws','New'];
cMenuOff=function(j){
    if(!
j)for(var i=0;i<cMenus.length;i++)
        {
d.getElementById("cMenu"+cMenus[i]).style.visibility='hidden';}
    else 
j.style.visibility='hidden';
event.cancelBubble=!0;}
function 
cMenu(t,i){    cMenuOff();
    var 
o2=d.getElementById('cMenu'+cMenus[i]);
    if(
cMenus[i]=='New'){ var ww='http://www.xxx.ru/?news_';var vN=t.id.substring(cMenus[i].length);
        
d.getElementById('nameNews').innerHTML=t.id;
        
d.getElementById('nameNews1').href=ww+'edit='+vN;
        
d.getElementById('nameNews2').href=ww+'delete='+vN;
    }
    
o2.style.left=d.all?event.x:event.pageXo2.style.top=d.all?event.y:event.pageY;
    if(
isOpera)d.getElementById('nameNews').style.width=96;
    
o2.style.visibility ='visible';
    
event.cancelBubble=!0;
}
</script>
            ?> <?
<body>    
<
div id=cMenuNws class=cMenu
    <
a href="http://www.compulenta.ru" >compulenta.ru</a
    <
a href="http://www.3DNews.ru">3DNews</a
    <
a href=http://news.yandex.ru/Russia/index.html>Yandex-news-ru</a> 
    
<hr
    <
a href=# onclick=cMenuOff(this.offsetParent);return!1>[hide]</a> 
</div>
<
div id=cMenuAll class=cMenu
    <
a href="http://www.sql.ru" >SQL.RU</a
    <
a href="http://www.google.com">Google</a
    <
a href="http://www.ya.ru">Yandex</a
    <
hr
    <
a href=# onclick=cMenuOff(this.offsetParent);return!1>[hide]</a> 
</div>

<
table><tr><td id=Nws><pre>
<
B>Новостя</B>.
ОткудаСанкт-Петербург 
Сообщений
3711        Нужно чтоб на элементе при клике
правой кнопкой выпадало меню

Менюкоторое сделал яМожно просто добавить
в меню один единственный свой пункт

</
pre></td><td id=All><pre><B>Усё.</B>
Все форумы PHP,PERL   Новый топик  Ответить 
(HTML&JavaScriptКлик правой кнопкой и меню. [new] 
Sarin 
Member 
</pre></td><td>&nbsp;</td></tr></table>

<
table><tr><td id=New1><div>Новость <B><i>номер</i></B</div></td></tr></table
<
span id=New2>Новость номер 2 </span><br>
<
span id=New3>Новость <B><i>номер</i></B</span><br>
<
span id=New4>Новость номер 4 </span><br>

<
div id=cMenuNew class=cMenu><center>
    <
div id=nameNews></div>
    <
a id=nameNews1 class=style6 onclick=alert(this.href);return!1>Редактировать</a>
    <
a id=nameNews2 class=style6 onclick=alert(this.href);return!1>Удалить</a></div>
</
body>?>  <!--чтобы работало меню, убрать onclick= -->

Замечания такие: просто div в статьях использовать нельзя, потому что offsetParent (в d.oncontextmenu=function() )по нему не "проходит", если кликаешь на вложенных тегах. Это серьёзное неудобство, оно иллюстрируется в 1-й м 3-й строчках. Первая строчка сделана правильно, на таблице, поэтому, что бы там ни стояло внутри, id таблицы (в td или table) отметится в цикле while(o), третья неправильно, поэтому клик по жирному тексту не сработает. Далее, дивы неудобно, потому что они ещё плохо регулируются по ширине, поэтому я поставил спаны. Но все проблемы снимает таблица (1-я строчка).

Меню cMenuNew на дивах тоже неудобно по причине неправильного выбора ширины (видно, что надписи не по центру) , поэтому я бы его переделал на таблице.

Дополнение. Удивительно, но FF 1.06 уже поддерживает oncontextmenu и даже отменяет стандартное меню контекста. После небольшой доработки вышеприведённый код стал совместим с FF. А чтоб Опере не было обидно, в ней (версия 7.54) работает меню по левой кнопке мыши.

   

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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