effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« : 30.09.2010, 13:48:37 » |
|
Довольно часто встречаются запросы по организации показа разной информации для разных, скажем, городов (ещё не мультисайтовость, но уже интерактивность какая-никакая). Т.е. при выборе из списка городов какого-нибудь города хочется получать новости по выбранному населённому пункту, и, скажем, пару дополнительных модулей с уникальной информацией. Предлагаю своё небольшое решение для подобных задач, не требующих глобального программирования- модуль “ Any chooser” (для J1.5 и 1.6/1.7, качать - по ссылкам в самом низу).  Сам по себе модуль ничего сложного не делает, а всего лишь позволяет создавать выпадающий список, и сохранять в куки пользовательские данные. А далее - врубаем фантазию и думаем, что можно с этим делать  . К примеру, я вывел стандартным модулем mod_latestnews информацию по выбранному городу, всего лишь хакнув пару строк в этом модуле (\modules\mod_latestnews\helper.php) if (isset($_COOKIE['cat'])) $catid=trim($_COOKIE['cat']); //проверили, есть ли такая кука else $catid = trim( $params->get('catid') ); //подставили её вместо номеров категорий, переданных через настройки модуля $secid = trim( $params->get('secid') ); //это изначальная строка
Как вариант, можно выводить подобным методом в шаблон уникальное имя позиции модуля, а в админке создавать уникальные для каждого «города» модули и им прописывать эту позицию. В общем, дальше сами играйтесь  Но сначала настраиваем и тестим всё на локалке, ибо, как показала практика, граната в опытных, но облизъяньих руках способна положить сайт (будет ругаться на куки неправильные).
|
|
|
|
« Последнее редактирование: 07.12.2011, 18:19:41 от effrit »
|
Записан
|
|
|
|
Aleks_El_Dia
JComments Tester
Репутация: +332/-7
Offline
Пол: 
Сообщений: 4402
AEDStudio Joomla! Direction
|
 |
« Ответ #1 : 30.09.2010, 20:06:11 » |
|
Интересная вещь) Демо покажеш?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #2 : 30.09.2010, 20:13:28 » |
|
да там на картинке всё демо видно ) только сраный радикал тормозит неимоверно  выбрал значение-страница обновилась, новостной модуль вывел новость из соотвествующей категории. дальше делаешь что хошь  кстати, я тут нашёл ещё более интересное решение - надо будет затестить: http://extensions.joomla.org/extensions/languages/multi-lingual-content/1767 там типа мультиязычность, но, по ходу, можно делать мульти_всё_что_хошь  для небольших сайтов очень удобная альтернатива джумфишам
|
|
|
|
|
Записан
|
|
|
|
zaero
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #3 : 13.11.2010, 12:52:15 » |
|
Отличный модуль. Подскажите пожалуйста, есть ли нечто подобное для Joomla 1.0? Если нет, можно ли как-нибудь этот модуль адаптировать к J1.0?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #4 : 13.11.2010, 13:03:29 » |
|
по сути там от Joomla только строки $params->get('data', ''); $document = & JFactory::getDocument(); и XML другой так что берёшь модуль под 1.0, смотришь, как там оформлены эти моменты и переписываешь
|
|
|
|
|
Записан
|
|
|
|
KocmonpaB
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #5 : 22.12.2010, 20:35:10 » |
|
effrit, а не могли бы Вы еще раз залить модуль, к сожалению по ссылке файла нет. заранее спасибо.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #6 : 22.12.2010, 20:48:33 » |
|
обновил ссылку в первом посте
|
|
|
|
|
Записан
|
|
|
|
KocmonpaB
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #7 : 22.12.2010, 20:50:27 » |
|
огромное спасибо
|
|
|
|
|
Записан
|
|
|
|
|
inga_den
Гость
|
 |
« Ответ #8 : 19.01.2011, 18:17:08 » |
|
Ну вот, опять файл не найден  А я так на него понадеялась! Вроде то, что надо...
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #9 : 19.01.2011, 19:08:36 » |
|
обновил. сейчас на форуме уже, если не почистят - не потеряется )
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #10 : 03.07.2011, 22:41:14 » |
|
Помогите перевести для Joomla 1.0. Совсем не знаю функций и операторов, которые используются в 1.5!
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #11 : 04.07.2011, 07:14:45 » |
|
а я не знаю операторов ни 1.5 ни, тем более, 1.0  но там переводить-то XML да две строки с "& JFactory". уж это-то можно нагуглить
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #12 : 04.07.2011, 11:28:47 » |
|
Да в том то и дело, что XML перевёл - там ничего сложного. А вот с & JFactory - проблемы. Поискал аналоги для Joomla 1.0. Но не пойму, что там в этих строчках делается. В файле php необходимо сделать изменения во-первых, в этом месте: defined('_JEXEC') or die('Restricted access'); А во-вторых, в этом: $data=mb_ereg_replace("\]","",$data); // remoove all ']' simbol at once $alldata=mb_split("\n",$data); // split text to array of strings $document = & JFactory::getDocument(); Но вот здесь и не пойму, что делать. Если убрать строчки, то модуль работает, но, естественно, неправильно. Если не убирать, то не работает. Помогите, пожалуйста. Очень надо!
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #13 : 04.07.2011, 11:59:09 » |
|
первая строка - это запрет прямого обращения к файлу. аналог из 1.0 defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #14 : 04.07.2011, 12:10:34 » |
|
Это я сделал. Забыл написать. Проблемы со вторым местом.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #15 : 04.07.2011, 12:12:10 » |
|
$redirectUrl=$document->base; заменить на $redirectUrl=$mosConfig_absolute_path а все строки с JFactory убрать
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #16 : 04.07.2011, 12:26:25 » |
|
Всё сделал, но всё равно не работает. Работает только тогда, когда комментирую строчки $data=mb_ereg_replace("\]","",$data); // remoove all ']' simbol at once $alldata=mb_split("\n",$data); // split text to array of strings Естесственно, тогда меню селекторное пустое, но сайт работает нормально.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #17 : 04.07.2011, 14:49:24 » |
|
Может что не так делаю? Но вроде ничего кроме вышеупомянутых строчек не менял. Странно как-то - это функции, вроде бы, обычные... ничего характерного именно для Joomla 1.5.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #18 : 04.07.2011, 14:55:33 » |
|
это к Joomla не имеет никакого отношения на сервере надо поставить библиотеку mbstring,скорее всего
|
|
|
|
|
Записан
|
|
|
|
Arkadiy
Группа развития
   
Репутация: +244/-5
Offline
Сообщений: 4895
Былененький он зел.
|
 |
« Ответ #19 : 04.07.2011, 14:58:50 » |
|
Всё сделал, но всё равно не работает. Работает только тогда, когда комментирую строчки $data=mb_ereg_replace("\]","",$data); // remoove all ']' simbol at once $alldata=mb_split("\n",$data); // split text to array of strings Естесственно, тогда меню селекторное пустое, но сайт работает нормально. Функции начинающиеся с mb_ насколько я помню требуют подключенного к апачу модуля для работы с многобитными кодировками (не помню как он называется), возможно у тебя его нет или не подключен. Но если Joomla 1.0, то там многобитных кодировок и не надо и смело можно эту приставку убрать, останутся функции, работающие с однобайтными кодировками.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #20 : 04.07.2011, 15:08:20 » |
|
Функции начинающиеся с mb_ насколько я помню требуют подключенного к апачу модуля для работы с многобитными кодировками (не помню как он называется), возможно у тебя его нет или не подключен. Но если Joomla 1.0, то там многобитных кодировок и не надо и смело можно эту приставку убрать, останутся функции, работающие с однобайтными кодировками. Большое спасибо, результат налицо - теперь уже селектор появляется... =), но сайт по прежнему не работает. После селектора ничего не грузится. Кто-нибудь тестировал вообще его под Joomla 1.0? Может я просто что-то не то делаю?
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #21 : 04.07.2011, 17:26:37 » |
|
Там, оказывается, ещё ниже были функции с mb_. Их тоже убрал и теперь всё стало выводиться, но теперь в выпадающем меню появляется только первая строчка, а все остальные - нет. Может дело именно в mb_? Может работает только с ней?
|
|
|
|
|
Записан
|
|
|
|
Arkadiy
Группа развития
   
Репутация: +244/-5
Offline
Сообщений: 4895
Былененький он зел.
|
 |
« Ответ #22 : 04.07.2011, 17:41:47 » |
|
Нет, mb_ требуется для UTF-8, для 1251 не нужно. Дело в чем-то еще.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #23 : 04.07.2011, 17:48:38 » |
|
Может выложить изменённые файлы - кто-нибудь у себя потестирует? Может у меня руки кривые? =)
|
|
|
|
|
Записан
|
|
|
|
Arkadiy
Группа развития
   
Репутация: +244/-5
Offline
Сообщений: 4895
Былененький он зел.
|
 |
« Ответ #24 : 04.07.2011, 18:38:20 » |
|
Попробуй $alldata=split("\n",$data); заменить на $alldata=split("<br />",$data); Мне помогло.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #25 : 04.07.2011, 19:36:53 » |
|
Попробуй Код:
$alldata=split("\n",$data);
заменить на Код:
$alldata=split("<br />",$data);
Мне помогло. Да, спасибо, это помогло - теперь выводятся все строчки, которые ввожу, но вот их выбор не происходит.. Когда выбираю какую-нибудь строчку, в фаерфоксе пишется сообщение: "Фаерфокс не может определить, как открытть данный адрес и т.п.". Тут, скорее всего, из-за того, что на локалхосте проверяю. Если проверяю на работающем сайте, то выскакивает просто абсолютный путь до файлов сайта. Сменил строчку $redirectUrl=$mosConfig_absolute_path; на $redirectUrl="index.php"; Но теперь не происходит выбора нужной строчки. Происходит перезагрузка страницы и строчка остаётся та, которая была, а не та, которую выбрал.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #26 : 04.07.2011, 20:31:22 » |
|
Попробуй $alldata=split("\n",$data); заменить на $alldata=split("<br />",$data); Мне помогло. А у тебя выбор происходит нормально? Когда меняешь строчки в выпадающем списке одну на другую - всё нормально работает? У меня просто перекидывает по адресу, который указан (например, главная страница), а значение в выпадающем списке не меняется, а остаётся как предыдущее.
|
|
|
|
|
Записан
|
|
|
|
Arkadiy
Группа развития
   
Репутация: +244/-5
Offline
Сообщений: 4895
Былененький он зел.
|
 |
« Ответ #27 : 04.07.2011, 20:48:31 » |
|
Меняется.
|
|
|
|
|
Записан
|
|
|
|
god-master
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
|
 |
« Ответ #28 : 04.07.2011, 20:56:13 » |
|
Если не трудно, прикрепи, пожалуйста, файл php твоего модуля. Что-то я ничего не понимаю. А ещё вопрос, а где тестируешь скрипт? На локалхосте?
|
|
|
|
|
Записан
|
|
|
|
Arkadiy
Группа развития
   
Репутация: +244/-5
Offline
Сообщений: 4895
Былененький он зел.
|
 |
« Ответ #29 : 04.07.2011, 21:06:04 » |
|
<?php /** * @version $Id: mod_footer.php 14401 2010-01-26 14:10:00Z louis $ * @package Joomla * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ // no direct access defined( '_VALID_MOS' ) or die(); $data = $params->get('data', ''); $redirect=$params->get('redirect', '0'); $expire=(int)$params->get('expire', '0'); //require(JModuleHelper::getLayoutPath('mod_anychooser')); ?> <script type="text/javascript"> function setCookie (name, value, expires, path, domain, secure) { var exdate=new Date(); exdate.setDate(exdate.getDate()+expires); document.cookie = name + "=" + escape(value) + ((exdate)? "; expires=" + exdate : "") + ((path)? "; path=" + path : "") + ((domain)? "; domain=" + domain : "") + ((secure)? "; secure" : ""); } function checkit(cook){ //alert(cook); var dataArr = cook.menu.value.split(';'); // make array from spllittin string for(i = 0; i < dataArr.length; i += 1){ var n_v = dataArr[i].split('='); // make pair name / value //alert( n_v[1]); setCookie(n_v[0], n_v[1], <?php echo $expire;?>, "/"); // push name, value and expiration date to cookie } location=cook.action; // simple redirect //document.forms["anychooser"].submit(); } </script> <? $data=mb_ereg_replace("\]","",$data); // remoove all ']' simbol at once $alldata=mb_split("<br />",$data); // split text to array of strings $redirectUrl=JPATH_SITE; // set redirect to the same page if ($redirect) $redirectUrl="/"; // or to the main page $label=""; if (isset($_COOKIE['label'])) $label=$_COOKIE['label']; // get value of 'label' from cookie if it's set echo "<div class='anychooser ".$label."'><form action='". $redirectUrl ."' method='post' name='anychooser'><select name='menu' size='1' onchange='checkit(this.form);'>"; $datcount=0; foreach($alldata as $single){ $parts=mb_split("\[",$single); // split string to two parts (label and data) $shoosed=" "; mb_ereg("label=(.*?);",$parts[1], $matches); // get value of 'label' from list if($label==$matches[1]) $shoosed=" selected "; // and compare it to cookie (if "yes" - made current list item 'selected') echo "<option".$shoosed."value='".$parts[1]."'>". $parts[0] ."</option>"; $datcount++; } //echo "<input type='submit' value='OK' />"; echo "</select></form></div>"; ?> Но предупреждаю - у меня Joostina 1.3, она схожа с Joomla 1.0 но не очень.
|
|
|
|
|
Записан
|
|
|
|
|