Recommended Posts

Появилась необходимость вывода двух категорий новостей на главной странице. Подскажите, как вывод этот осуществить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Включаем в настройках в закладке новостей "Использовать категории для новостей"

2. Создаем через phpmyadmin новое поле 

alter table re_news add column news_topic_id int(11) not null default 0;

3. Идем в новости, там появляются новые кнопки.

4. Создаем нужные разделы, например с URL = test-news

5. Добавляем в этот раздел тестовую новость.

 

Теперь на сайте она будет в разделе

http://сайт/news/test-news/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Включаем в настройках в закладке новостей "Использовать категории для новостей"

2. Создаем через phpmyadmin новое поле 

alter table re_news add column news_topic_id int(11) not null default 0;

3. Идем в новости, там появляются новые кнопки.

4. Создаем нужные разделы, например с URL = test-news

5. Добавляем в этот раздел тестовую новость.

 

Теперь на сайте она будет в разделе

http://сайт/news/test-news/

 

А какой код должен быть чтобы выводить одну из категорий в шаблоне?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас только вручную, вскоре сделаем вывод в шаблон.

 

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

 

Вот для примера:

Peterburgs_7419913_10737601.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не через смарти.

В общих чертах принцип такой:

1. В контроллере шаблона main.php создается функция для подкачки нужных наборов новостей getMyNewsAssorty().

2. В теле контроллера в функции main() эта подкачка вызывается в виде

 

$this->template->assert('my_news_assorty', $this->getMyNewsAssorty());

 

3. Уже в шаблоне мы имеем переменную {$my_news_assorty} c наборами новостей, которую прогоняем через цикл {foreach} и строим колонки или иной вывод.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не через смарти.

В общих чертах принцип такой:

1. В контроллере шаблона main.php создается функция для подкачки нужных наборов новостей getMyNewsAssorty().

2. В теле контроллера в функции main() эта подкачка вызывается в виде

 

$this->template->assert('my_news_assorty', $this->getMyNewsAssorty());

 

3. Уже в шаблоне мы имеем переменную {$my_news_assorty} c наборами новостей, которую прогоняем через цикл {foreach} и строим колонки или иной вывод.

 

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

Интересно посмотреть и испробовать, ждем)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Функция выборки

function getMyNewsAssorty(){if(''!=$this->getConfigValue('apps.news.item_alias')){$app_item_alias=$this->getConfigValue('apps.news.item_alias');}else{$app_item_alias='news';}$news=array();$DBC=DBC::getInstance();//Например хотим выбирать из категорий с ид=1 и 2$query='SELECT * FROM '.DB_PREFIX.'_news WHERE `news_topic_id` IN(1,2) ORDER BY `date` DESC'; $stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$ar['href']=SITEBILL_MAIN_URL.'/'.$app_item_alias.$ar['news_id'].'.html';$news[$ar['news_topic_id']][]=$ar;}}return $news;}

Должна быть размещена в /template/frontend/имя_вашего_шаблона/main/main.php внутри class frontend_main extends SiteBill_Krascap { }

 

ПС. Запрос к БД в функции "жадный". Тут можно оптимизировать, если новостей очень много и надо выбрать только по некоторому количеству для каждой категории, то лучше сделать два запроса на конкретные категории и ограничить их с помощью LIMIT.

 

Вызов

$this->template->assert('my_news_assorty', $this->getMyNewsAssorty());

размещается в том же файле, но уже внутри функции main(). Не важно в каком месте, но оптимально сразу же после строки global $__site_title, $folder, $smarty;

 

Вывод (пример)

<!--Вывод новостей из категории 1-->{if $my_news_assorty[1]|count>0}{foreach from=$my_news_assorty[1] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}<!--Вывод новостей из категории 2-->{if $my_news_assorty[2]|count>0}{foreach from=$my_news_assorty[2] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}

их ставится уже где-то в шаблоне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Функция выборки

function getMyNewsAssorty(){if(''!=$this->getConfigValue('apps.news.item_alias')){$app_item_alias=$this->getConfigValue('apps.news.item_alias');}else{$app_item_alias='news';}$news=array();$DBC=DBC::getInstance();//Например хотим выбирать из категорий с ид=1 и 2$query='SELECT * FROM '.DB_PREFIX.'_news WHERE `news_topic_id` IN(1,2) ORDER BY `date` DESC'; $stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$ar['href']=SITEBILL_MAIN_URL.'/'.$app_item_alias.$ar['news_id'].'.html';$news[$ar['news_topic_id']][]=$ar;}}return $news;}

Должна быть размещена в /template/frontend/имя_вашего_шаблона/main/main.php внутри class frontend_main extends SiteBill_Krascap { }

 

ПС. Запрос к БД в функции "жадный". Тут можно оптимизировать, если новостей очень много и надо выбрать только по некоторому количеству для каждой категории, то лучше сделать два запроса на конкретные категории и ограничить их с помощью LIMIT.

 

Вызов

$this->template->assert('my_news_assorty', $this->getMyNewsAssorty());

размещается в том же файле, но уже внутри функции main(). Не важно в каком месте, но оптимально сразу же после строки global $__site_title, $folder, $smarty;

 

Вывод (пример)

<!--Вывод новостей из категории 1-->{if $my_news_assorty[1]|count>0}{foreach from=$my_news_assorty[1] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}<!--Вывод новостей из категории 2-->{if $my_news_assorty[2]|count>0}{foreach from=$my_news_assorty[2] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}

их ставится уже где-то в шаблоне.

 

Все заработало, спасибо. Но, я сделал вывод по такому же принципу как и у вас попытался вывести и дату новости по принципу <time>{$mynews1.date}</time>, но выдает прямое значение из бд (набор цифр вроде <time>1391041286</time>). как сделать ее нормальной, подскажите

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

но выдает прямое значение из бд (набор цифр вроде <time>1391041286</time>). как сделать ее нормальной, подскажите

 

дата для новости хранится с формате unix_timestamp. Для его перевода в человеческий вид можете использовать модификатор smarty доступный в шаблоне.

{$news.date|date_format:"%d-%m-%Y"}

вот то, что с кавычках - %d-%m-%Y - это формат, в которм вы хотите вывести дату. Варианты и значения разных кусочков формата можно глянуть тут http://www.smarty.net/docsv2/ru/language.modifier.date.format.tpl почти в самом конце страницы.

А если уже для нужного формата не хватает возможностей модификтора смарти, тогда форматирование даты можно перенести в функцию, которая совершает забор данных из БД. Тут все зависит от конечного вида выводимой даты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

дата для новости хранится с формате unix_timestamp. Для его перевода в человеческий вид можете использовать модификатор smarty доступный в шаблоне.

{$news.date|date_format:"%d-%m-%Y"}

вот то, что с кавычках - %d-%m-%Y - это формат, в которм вы хотите вывести дату. Варианты и значения разных кусочков формата можно глянуть тут http://www.smarty.net/docsv2/ru/language.modifier.date.format.tpl почти в самом конце страницы.

А если уже для нужного формата не хватает возможностей модификтора смарти, тогда форматирование даты можно перенести в функцию, которая совершает забор данных из БД. Тут все зависит от конечного вида выводимой даты.

Спасибо за помощь, все получилось вывел дату с помощью <time>{$mynews1.date|date_format:"%d.%m.%Y"}</time>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Включаем в настройках в закладке новостей "Использовать категории для новостей"

2. Создаем через phpmyadmin новое поле 

alter table re_news add column news_topic_id int(11) not null default 0;

3. Идем в новости, там появляются новые кнопки.

4. Создаем нужные разделы, например с URL = test-news

5. Добавляем в этот раздел тестовую новость.

 

Теперь на сайте она будет в разделе

http://сайт/news/test-news/

 

Сделал, как вы написали, но ошибка Table 'bh53460_liga.re_news_topic' doesn't exist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал, как вы написали, но ошибка Table 'bh53460_liga.re_news_topic' doesn't exist

Выполните в phpmyadmin

CREATE TABLE IF NOT EXISTS `re_news_topic` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,`url` varchar(255) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Выполните в phpmyadmin

CREATE TABLE IF NOT EXISTS `re_news_topic` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,`url` varchar(255) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

 

Спасибо помогло, а можно попросить вас помочь еще вот с этими вопросами, а то в другой ветке не дождался ответа:

 

1) После установки списка улиц, стала проблема с модулем геокодирование(кнопку нажимаю), но обозначения на карте не меняются. 

 

координаты уже есть у всех объектов, но я их ставил в ручную и не правильно. а теперь хочу выставить правильно через геокодирование, но не получается

 

2) Как сделать, чтобы по умолчанию на главной странице выводились объявления в виде блоков а не списками( в админке замена лист на thumbs не работает)

 

3) как ограничить число объявлений на главной и в блоке спецразмещения. (справа)

 

4) Как сделать слайдер картинок . вот например объявление: http://liga-prim.ru/...ir/realty8.html    (тема realia)

 

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

 

5) в админ панели встречаются местами кнопки (применить) и в виде буквы (i) при нажатии на (i) ошибка, применить не работает.

 

6) как сменить стандартный путь к админке, а как изменить логин admin на свой, тогда где-то было написано что не будут доходить сообщения с сайта.

 

7) Есть ли решение, например пользователь хочет сдать квартиру, но он на сайте не регистрируется(я отключил) при создании объявления он указывает свои контактные данные, и я размещаю объявление после модерации. как сделать так , чтобы я видел его контакты, а когда пользователи будут смотреть объявления видели контакты админа. 

 

8) Что вы думаете в будущем по поводу создания модуля блокировки по номеру телефона и электронной почты, других агенств(чтобы не размещали объявления свои)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо помогло, а можно попросить вас помочь еще вот с этими вопросами, а то в другой ветке не дождался ответа:

 

1) После установки списка улиц, стала проблема с модулем геокодирование(кнопку нажимаю), но обозначения на карте не меняются. 

 

координаты уже есть у всех объектов, но я их ставил в ручную и не правильно. а теперь хочу выставить правильно через геокодирование, но не получается

 

2) Как сделать, чтобы по умолчанию на главной странице выводились объявления в виде блоков а не списками( в админке замена лист на thumbs не работает)

 

3) как ограничить число объявлений на главной и в блоке спецразмещения. (справа)

 

4) Как сделать слайдер картинок . вот например объявление: http://liga-prim.ru/...ir/realty8.html    (тема realia)

 

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

 

5) в админ панели встречаются местами кнопки (применить) и в виде буквы (i) при нажатии на (i) ошибка, применить не работает.

 

6) как сменить стандартный путь к админке, а как изменить логин admin на свой, тогда где-то было написано что не будут доходить сообщения с сайта.

 

7) Есть ли решение, например пользователь хочет сдать квартиру, но он на сайте не регистрируется(я отключил) при создании объявления он указывает свои контактные данные, и я размещаю объявление после модерации. как сделать так , чтобы я видел его контакты, а когда пользователи будут смотреть объявления видели контакты админа. 

 

8) Что вы думаете в будущем по поводу создания модуля блокировки по номеру телефона и электронной почты, других агенств(чтобы не размещали объявления свои)

4. В теме реалиа прокрутка работает, напишите адрес сайта - посмотрю.

7. Как пользователь создаст объявление без регистрации? вы можете просто изменить его данные на свои (указав что податчик объявления вы), без модерации он не сможет опобликовать объявление. Поставьте группам пользователей аттрибуты которые им доступны.

3. Ограничить объявление на главной можно через админку (вывод количества объявлений). В спец. предложениях можно через код

2. Опятьже нужен доступ к сайту , что бы проверить что-там не так. (по умолчанию - у меня - все работает)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://liga-prim.ru/

 

4. В теме реалиа прокрутка работает, напишите адрес сайта - посмотрю.

7. Как пользователь создаст объявление без регистрации? вы можете просто изменить его данные на свои (указав что податчик объявления вы), без модерации он не сможет опобликовать объявление. Поставьте группам пользователей аттрибуты которые им доступны.

3. Ограничить объявление на главной можно через админку (вывод количества объявлений). В спец. предложениях можно через код

2. Опятьже нужен доступ к сайту , что бы проверить что-там не так. (по умолчанию - у меня - все работает)

http://liga-prim.ru/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по поводу слайдера, у вас написано что 

<a class="carousel-prev hidden" href="#" style="display: block;">Previous</a>

<a class="carousel-next hidden" href="#" style="display: none;">Next</a>

нужно исправить на 

<a class="carousel-prev" href="#" style="display: block;">Previous</a>

<a class="carousel-next" href="#" style="display: none;">Next</a>

больше пока сказать не могу, т.к. нужен доступ к сайту. Возможно нужно будет в вашем случаи править bootstrap 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

по поводу слайдера, у вас написано что 

<a class="carousel-prev hidden" href="#" style="display: block;">Previous</a>

<a class="carousel-next hidden" href="#" style="display: none;">Next</a>

нужно исправить на 

<a class="carousel-prev" href="#" style="display: block;">Previous</a>

<a class="carousel-next" href="#" style="display: none;">Next</a>

больше пока сказать не могу, т.к. нужен доступ к сайту. Возможно нужно будет в вашем случаи править bootstrap 

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

сейчас у вас все хорошо отображается

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Функция выборки

function getMyNewsAssorty(){if(''!=$this->getConfigValue('apps.news.item_alias')){$app_item_alias=$this->getConfigValue('apps.news.item_alias');}else{$app_item_alias='news';}$news=array();$DBC=DBC::getInstance();//Например хотим выбирать из категорий с ид=1 и 2$query='SELECT * FROM '.DB_PREFIX.'_news WHERE `news_topic_id` IN(1,2) ORDER BY `date` DESC'; $stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$ar['href']=SITEBILL_MAIN_URL.'/'.$app_item_alias.$ar['news_id'].'.html';$news[$ar['news_topic_id']][]=$ar;}}return $news;}

Должна быть размещена в /template/frontend/имя_вашего_шаблона/main/main.php внутри class frontend_main extends SiteBill_Krascap { }

 

ПС. Запрос к БД в функции "жадный". Тут можно оптимизировать, если новостей очень много и надо выбрать только по некоторому количеству для каждой категории, то лучше сделать два запроса на конкретные категории и ограничить их с помощью LIMIT.

 

Вызов

$this->template->assert('my_news_assorty', $this->getMyNewsAssorty());

размещается в том же файле, но уже внутри функции main(). Не важно в каком месте, но оптимально сразу же после строки global $__site_title, $folder, $smarty;

 

Вывод (пример)

<!--Вывод новостей из категории 1-->{if $my_news_assorty[1]|count>0}{foreach from=$my_news_assorty[1] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}<!--Вывод новостей из категории 2-->{if $my_news_assorty[2]|count>0}{foreach from=$my_news_assorty[2] item=mynews1}<a href="{$mynews1.href}">{$mynews1.title}</a>{/foreach}{/if}

их ставится уже где-то в шаблоне.

 

А как ограничить количество выводимых новостей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

условие поставить 

{if $smarty.foreach.my_news_assorty[2].iteration%4==0}

{/if}

(где 4 целое число - выводов)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что-то не выходит, подскажите куда вставлять?

Вот мой код вывода новостей:

<!--Вывод новостей из категории 1-->{if $my_news_assorty[1]|count>0}{foreach from=$my_news_assorty[1] item=mynews1}<div class="news_item"><p><time>{$mynews1.date|date_format:"%d.%m.%Y"}</time><a class="news_title_onhome" href="{$mynews1.href}">{$mynews1.title}</a></p><div class="anons">{$mynews1.anons|strip_tags|substr:0:300}... <a href="{$mynews1.href}">подробнее</a></div></div>{/foreach}{/if}</div>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

<!--Вывод новостей из категории 1-->
{if $my_news_assorty[1]|count>0}
{foreach from=$my_news_assorty[1] item=mynews1}

{if $smarty.foreach.my_news_assorty[1].iteration%4==0}
<div class="news_item">

<p>
<time>{$mynews1.date|date_format:"%d.%m.%Y"}</time>
<a class="news_title_onhome" href="{$mynews1.href}">{$mynews1.title}</a>
</p>
<div class="anons">{$mynews1.anons|strip_tags|substr:0:300}... <a href="{$mynews1.href}">подробнее</a></div>
</div>

{/if}
{/foreach}
{/if}
</div>

 

должно получиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

<!--Вывод новостей из категории 1-->

{if $my_news_assorty[1]|count>0}

{foreach from=$my_news_assorty[1] item=mynews1}

{if $smarty.foreach.my_news_assorty[1].iteration%4==0}

<div class="news_item">

<p>

<time>{$mynews1.date|date_format:"%d.%m.%Y"}</time>

<a class="news_title_onhome" href="{$mynews1.href}">{$mynews1.title}</a>

</p>

<div class="anons">{$mynews1.anons|strip_tags|substr:0:300}... <a href="{$mynews1.href}">подробнее</a></div>

</div>

{/if}

{/foreach}

{/if}

</div>

 

должно получиться.

 

К сожалению не помогло, никаких изменений(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас