Вы не зашли.
точно так же как и в твоем - просто у тебя идет
echo '<a href="http://рекламируемыйсайт2/" target="_blank">анкорсайта2</a>';
а в плагине
$side_show = '<a href="http://рекламируемыйсайт2/" target="_blank">анкорсайта2</a>';
+ плагин удобнее тем, что ты можешь выводить таких блоков несколько, например в сайдбаре и футере...
но как подметил Wolverine - для большого кол-ва это урлов это не самое удачное решение, лучше искать другое...
пример для последних комментов, другие блоки по аналогии
$side_show = '{plugin_lastcomments}';
соответственно плагин ласт коментс должен быть включен
legenda, пока что для аналагичной задачи использую вот такой костыль ввиде вот такого простейшего плагина:
<?php
if (!defined('NGCMS')) die ('HAL');
add_act('index', 'mysidebar');
function mysidebar(){
global $tvars, $template, $tpl;
$ref = $_SERVER['REQUEST_URI'];
$ref = explode("/", $ref);
$url_id = $ref[2];
if ($url_id == 'тут_урл_на_котором_надо_что-то_вывести' ){// вместо http://мой сайт/2012-01-01.html ставим 2012-01-01.html
$side_show = 'блаблабла, тут пишем инфу для конкретного урла';
//вопрос - почему не использую адс или адс про?
//ответ ver.1 - адс и адс про не работают со страницами плагинов, т.е. вывести инфу на зтранице плагина нельзя
//ответ ver.2 - тут я могу взять не только текстовую инфу, но и вообще все что угодно (RSS, XML, YML, подключиться к другой базе и т.д.), затем сделать с ней все что угодно, а затем вывести то что нужно...
}else{
$side_show = '';
}
$tvars['vars'] = array (
'my_data' => $side_show
);
$tpl -> template('mysidebar', extras_dir."/mysidebar/tpl");
$tpl -> vars('mysidebar', $tvars);
$output .= $tpl -> show('mysidebar');
$template['vars']['data_mysidebar'] = $output;
}
если подходит, то
1. создаешь папку mysidebar, в которой создаешь файл mysidebar.php и вставляешь данный код
2. в ней создаешь папку tpl, в которой должен быть файлик mysidebar.tpl, содержащий вот такое:
{my_data}
3. в шаблоне в main.tpl в том месте где хочешь вівести пишешь {data_mysidebar}
если есть решение более элегантное то присоеденяюсь к вопросу Легенды, поскольку с твигом не сложилось (http://ngcms.ru/forum/viewtopic.php?pid=27177#p27177)
Можно поподробней 30 wmz только верстка или диз тож рисуете?
ни то ни другое
адаптация - грубо говоря, нужный шаб сохраняется на локальном компе, затем в нужном месте пишется {mainblock} - и вуаля, готово... для плагинов аналогично + некоторые мелкие ньюансы
---но это из практики - НЕ РЕАЛЬНО---, любой 'движок' Вам - это не предоставит
из практики - реально
1. Нарисовать 1 страницу (главную) + 1 внутряк это ~60$.
скромно молчим если страниц не 2 а допустим 5-10 (а к примеру для е-комерции это обычная практика)
Ahatomik, а почему бы не попробовать самому? план действий описан в ответе vadim008-у, а30 баксов возьмешь у папы как честно заработанные и положишь в свой карман
и это может быть быстрее чем поиск исполнителя
блин, не айс... получается что шаблоны могут быть несовместимыми в пределах одной версии - предвижу появление вопросов в стиле "я вот скачал шаблон для 0.93, а он не работает"
это в индекс.пхп движка?
получается что оба шаблонизатора одновременно использовать нельзя?
а как же тогда эту фразу понимать?:
Достаточно существующего функционана? Продолжаем использовать то что есть.
Хочется что-то новое? Переходим на TWIG, причём только в нужных файлах-шаблонах.
ммм... а как подключить твиг к шаблону? в "новом" default не обнаружил - плохо искал или он тоже "нетвиганутый"?
Wolverine, нифига не понял если честно... гугл говорит что-то про getRequestUri - но ведь это для фреймворка Symfony?
блин, возможно из-за того что у меня в шаблоне вообще не работает твиг - если прописать
{% if pluginIsActive('xfields') %}...{% endif %}
то это же и выводится, хотя долно быть лишь многоточие... как его включить?
Ваши вопросы/предложения жду в этой теме...
как прописать условие для конкретной страницы? или хотя бы для конкрутного плагина?
к примеру если я хочу вывести на странице с плагином доп. инфу в шапке, сайдбаре или футере - т.е. за пределами mainblock
в смарти есть такая возможность - надеюсь что должна быть и в твиге
и еще - почему не работает {% debug %}? было бы удобно отлавливать... в вер. 0.93/880 точно не работает
парни, поскольку с циклами разобрался - остался вопрос с условиями, ведь в твиге есть поддержка условий?
полагаю, что условие "старым" методом раскритикует ROZARD, и будет прав
поэтому вопрос 1 - как сделать как в SMARTY:
{if $smarty.get.ukey eq 'блаблабла'}
тут выводим, если джет.юкей соответствует блаблабла
{/if}
т.е. передать условие из плагина в шаблонизатор? ведь подобная реализация более "правильная", чем сравнивать в плагине и передавать в разные переменные шаблона? или все-же нет?
вопрос 2
//оффтоп бегин
тут вспомнился топик где говорили что ходужник и верстальщик в одном лице - это типа круто, типа значит чел шарит, рубит и все такое... вероятно те кто говорили не встречались с перлами от подобных "художниковерстальщиков" вроде
{if условие1 eq 'блаблабла'}инфа для условия 1 {if условие2 eq 'блаблабла'}инфа для условия 2 {if условие3 eq 'блаблабла'}инфа для условия 3 {/if}{/if}{/if}
//оффтоп енд
т.е. второй вопрос - как "правильно" для твига сделать сложные условия?
нет, это не результат апгрейда - 0.93 ставилась изначально
пример структуры я указывал выше, девушка позакидывала новости сразу в конечные категории, дополнительно ничего не помечалось (т.е. главными стали "седаны", "кроссоверы" и т.д.)
на след. день эти же новости были подредактированы - просто поставились галочки для других категорий... т.е. если новость была в "седанах" - то она стала в "седанах", "легковых" и "автомобилях" - но главной (т.е. та которая в выпадающем меню - она в catid первая) все равно осталась "седаны"
чтобы было понятнее - попробуй добавить что-то, допустим в "финансовые", сохранить - а затем при редактировании новости поставь галочку напротив "плагины"
суть предложения - сделать подобное невозможным, т.е. чтобы пользователь просто не смог выбрать главной дочернюю категорию ("легковые" или "седаны" в примере)
либо если выбрал - то чтобы корневая категория автоматом становилась первой (это если так будет проще)
хотя тут хз если честно - непонятно как быть когда структура категорий будет отличаться от той что в примере, возможно кому-то такая хотелка как раз помешает
выглядет так же, SVN880
там не спутано - там главной задана та которая касалась конкретно новости, как в примере с автомобилями
т.е. если новости были добавлены в "седаны" - вот она и стала главной...
easmik, вообще-то я полагал что вопрос касается существующих новостей
самое первое что пришло в голову:
1. делаешь экспорт базы (интересует таблица ng_news)
2. открываешь ее в notepad2 или notepad++
3. ищешь в меню "найти и заменить" и заменяешь все a href="http://letitbit на a rel="nofollow" href="http://letitbit
4. импортируешь обратно
зы
ток сделай резервную копию на всякий пожарный
vitaly, получилось вот что:
допустим имеем вот такую структуру категорий
|- автомобили
|--легковые
|---седаны
новость изначально добавлена в "седаны" - т.е. именно эта категория в catid первая
косяк был замечен лишь на след. день - в итоге девушка поставила галочки в соотв. новостях напротив "легковые" и "автомобили", причем в каком порядке она ставила эти галочки - в таком порядке и стоит корневая (т.е. автомобили - она может быть после второй запятой, а может и после первой)
но главной должна быть категория "автомобили"... хз - если это единичная хотелка то наверно не стоит ничего менять - просто попрошу девушку пощелкать (думаю что пощелкать один раз ради прироста скорости навсегда можно)
но если подобную хотелку несложно сделать в движке - то может есть смысл? ведь таких девушек может быть много...
Wolverine, "текстовая строка через запятую" это и есть массив
конкретно в моем случае - мне нужно по-разному структурировать данные, в зависимости от того какая категория является корневой
если делать лайком - то мне придется делать два запроса, к примеру для первой части
$cats_1 = 'AND catid LIKE %10%'
и для второй
$cats_2 = 'AND catid LIKE %20%'
и соответственно выводить
а если родительская категория будет всегда первой - то делаю один запрос, и просто получаю catid, затем
$cats = explode(",", $row['catid']);
или так
$cats = explode(",", $row['catid']);
$cats = array_shift($cats);
и вывожу если $cats[0] = 10 первую часть, а если $cats[0] = 20 то вторую (во втором варианте соответственно сравниваю $cats)
специально не проверял, но по-моему так должно быть быстрее... во-первых сам запрос выполнится быстрее, а во вторых в случае с array_shift это не будет зависеть от кол-ва категорий, в которых находится данная новость
vitaly, "главная" - это так которая помечена главной в "управление категориями"? если да, то вопрос можно считать закрытым
если главная всегда будет первой - то можно и массивом, брать первый элемент - когда категорий много то должно быть быстрее чем LIKE
но сейчас получается маємо що маємо (с) - т.е. косяк...
во флудилке пытались сделать удобным для секретарш, а в данном случае это косяк подобной секретарши... или все-таки движка?
ок, тогда не буду изобретать костыли и обьясню это тем кто будет заполнять - но в список пожеланий к движку данный момент думаю нужно добавить, т.к. сейчас категории хранятся в том порядке в котором были помечены чекбоксы в админке
catid это не совсем то - когда материал размещен в неск. категориях, то они выводятся в том порядке, в каком были нажаты "галочки" в админке
например 40,3,10 - "главная" которая мне нужна это 10
я могу взять такую новость, используя LIKE в запросе, как в первом посте - но во-первых это выполняется дольше, а во-вторых кроме категории 10 будет получена категория 100 или 110, и т.д. - т.е. все где имеется 10
блин, возможно плохо спрашиваю - мне нужно получить лишь те материалы, для которых категория с ид 10 является корневой
причем желательно не зависеть от того, что записано в catid - либо 40,3,10 либо 10,3,40 либо просто 10
$SYSTEM_FLAGS['news']['db.categories'] работает только в новостях? в страницах, созданных плагином ее использование возможно? или она не подойдет под мою задачу?
где - в плагине
чего - ид
есть ли у движка готовая функция для вывода категорий?
для урлов есть удобная функция newsGenerateLink() - которая позволяет не париться, когда обьект находится в нескольких категориях
а есть ли что-то подобное для категорий? обьект находится в нескольких категориях, нужно получить и сравнить корневые категории...
а то пока что делаю так
$cats_select = 'AND catid LIKE ';
$cats_select .= db_squote('%'.$get_cats.'%');
но надеюсь что имеется готовый вариант для категорий
как пользоваться?
1. редактируем
$server = 'localhost';//хост
$user = 'root';//юзер
$password = '';//пароль
$database1 = '';//жумла или жустина, имя базы
$database2 = '';//ngcms, имя базы
2. запускаем
дополнительно:
сейчас данные указаны для денвера (юзер рут, пароль отсутствует) - рекомендую делать это дело на локальном сервере а не на рабочем...
конвертер писался весной 2011-го, т.е. во времена расцвета джумлы 1.5 (теоретически должен работать и на 1.6, а на 1.7 не тестировался - там отличается работа с категориями)
поэтому если что-то не получается, просьба не писать "не работает" а хотя бы приаттачить базу, с которой не работает - постараюсь разобраться...
надеюсь что данный конвертер поможет тем, кого не устраивает тяжеловесность вышеназванных движков
все, разобрался - с первым вопросом ошибка была из-за того что
$xg = $twig->loadTemplate($tpath['plugin'].'plugin.tpl');
был внутри цикла, а надо было до него...
со вторым - пока что хз, попробую глянуть еще на другом сервере...
если кому интересно - с твигом получился чуть меньший размер плагина (3060 кб против 3218) но увеличился размер шаблона - один файл на 1029 кб против двух файлов 393кб + 450кб
первое преимущество лежит на поверхности - верстальщику будет проще изменять/создавать шаблон, особенно если он раньше имел дело со SMARTY (не нужно париться с пхп)
буду благодарен если накидаете в меня другими преимуществами твига
ROZARD, $twig добавлен - полагаю что без него вообще плагин бы не работал...
а по поводу компилирования - что-то подозрительно много раз компилирует - могу скинуть урл в личку, сам глянешь... хотя стоп - если я сделал изменения в плагине - то он компилирует заново?
ROZARD, vitaly - спасибо, буду переходить на твиг...
но появились новые вопросы:
1. когда данные имеются то все нормально, работает отлично
но когда в массиве пусто - получаю ошибку
[ 1]: Call to a member function render() on a non-object
- ругается на строку
$template['vars']['mainblock'] = $xg->render($tVars);
в голову лезет такое решение - проверять массив и если он пустой то вместо
'entries' => $favEntries
ставить
'entries' => 'ничего нету'
но если уже взялся делать "правильно" - хочется знать, почему не работает условие в шаблоне? так как в примере Виталия:
{% for entry in entries %}
тут данные
...
{% else %}
тут сообщение что данных нету
{% endfor %}
2. на старом шаблонизаторе время генерации было примерно одинаковое и если несколько раз обновлять одну и туже страницу отличалось незначительно (использовал {queries} и {exectime})... когда сделал на твиге - то если пообновлять страницу, значение {exectime} может отличаться в несколько раз - лично у меня получалось от 0.11 до 0.99 сек... почему такой большой разброс? это нормально? 0.99 считаю неприемлимым - как бороться?