- Идентифицирайте се или се регистрирайте за да изпращате коментари
17 Юли, 2010 - 12:21
Здравейте,
Ситуацията е следната
Настроил съм page при създаване да е активирана опцията "Фиксиран най-горе в списъка"
Трябва ми обаче така да остават винаги само последните (най-новите) 3 добавени.
Опитах с Rules, но не разбрах точно какво прави.
Общо взето има начална страница с много views в първото се показват "Фиксирани ..." в другите - по категории след горните (т.е. нефиксираните), за да не се дублират в различните views
Идеята, която ми е най-близо за сега е при запис на нова page да взема най-голямото NID-3 и да му променям "Фиксирани ..."
Това ли е правилната логика?

Ако правилно съм разбрал, решението е много лесно, направи си един views, добави си полетата, които искаш да се визуализират и Items to display = 3 . Сложи си Sort criteria descending (по минути примерно). Добави един display block и му задай да го визуализира само на съответната страница. Ако съм разбрал грешно дай да видим някакъв пример за ориентация
.
е, прекалено е лесно, за да е това
и това е решение, ако има едно views за показване, случаят обаче е друг
Както казах, на първата страница има много views
1. за показване на последни 3, без оглед на категория, а в следващите става интересно
2. има 3 views, които показват всяко от тях последни 3 от 3 категории от един речник, разбира се без тези в първото views
3. има 4 views, които показват всяко от тях последни 3 от 4 категории от друг речник, разбира се без тези в първото views
в първото се показват най-нови без оглед на категориите, а следващите са по категории, като пропускат тези, показани в първото. Не се знае статия от коя категория ще се пише, за да се зададе офсет на следващите views
решението според мен е последните 5 да са маркирани по някакъв начин, варианти има много, аз съм си избрал да се "фиксират", не държа твърдо на това, ако има друго решение
засега е с вариант полуавтоматизирано, т.е. като си въведеш за деня например статиите да влезеш в "Съдържание" и 10 например след първите 3 да се маркират и да се направят "Нефиксирани", което също не е кой знае какво затруднение
Истинско автоматизирано решение, според мен в този случай, е функция в template.php, която при запис на нова статия да промени на последен nid-3 (id на последния нод минус три) "фиксиран" на "нефиксиран" (в случай че ми остане време по този проект)
Разработка на сайт с Друпал Разработка на модули за Друпал Drupal.org user
SVE, дай реалния пример че се оплетох стези обяснения или дай пример с измислени категории:ябълки и круши и тем подобни че с числа не мота да си го представя
Автоморги и авточасти втора употреба|Обяви купувам| Блога ми| Статуси|I
Drupal
може малко объркано да го обяснявам :) ето:
Разработка на сайт с Друпал Разработка на модули за Друпал Drupal.org user
уаууу ти ме удари в земята с това нещо

сложно ми се вижда на пръв поглед,но ще мисля върху въпроса
Автоморги и авточасти втора употреба|Обяви купувам| Блога ми| Статуси|I
Drupal
първото views, то е ясно сортира ги единствено по дата, без филтър, с лимит 3
следващите сащо сортират по дата с лимит 3, филтър съответната категория, и филтър за фиксиран = Не
с функцията целта е след запис на нод, на нод айди минус 3 да промени фиксиран на нефиксиран, за да отпадне от първото views и да "влезе" в съответното следващо views
благодаря за отделеното време, и аз ще го мисля като ми остане време, сега се боря с css и js
Разработка на сайт с Друпал Разработка на модули за Друпал Drupal.org user
така и не мога да си го представя за последното. така ,че се сетих за вариант с Панелс модула да си обособиш по елементарни Вюс в него, така няма ли да ти е по лесно ? так апотребителите ще виждам същият резултат
Автоморги и авточасти втора употреба|Обяви купувам| Блога ми| Статуси|I
Drupal
реших си въпроса
с добавка към _preprocess_node на
//Промяна на sticky за по-стар нод if ($variables['type'] == 'story') { $node = db_query('SELECT MAX(nid) FROM {node}'); $row = mysql_fetch_array($node, MYSQL_NUM); $older = $row[0] - 3; db_query("UPDATE {node} SET {sticky} = 0 WHERE nid = $older"); }може още малко да се оптимизира май, подсказките са добре дошли
едит:
в една тема (custom) горния код работи като пушка, а в друга (субтема на ZEN) не, та се наложи да го приведа по стандарта, с лек ъпгрейд за ограничаване в търсенето
if ($vars['type'] == 'story') { $node = db_query_range("SELECT MAX(nid) FROM {node} WHERE type = 'story'"); $row = db_fetch_array($node, MYSQL_NUM); $older = $row[0] - 3; db_query("UPDATE {node} SET {sticky} = 0 WHERE nid = $older"); }едит2: това работи, но не е правилната логика
едит3: последен вариант
function MyTheme_preprocess_node(&$variables) { // test for story node type if ($variables['type'] == 'story') { $node = db_query("SELECT n.nid, n.sticky FROM {node} n WHERE n.type = 'story' ORDER BY n.nid DESC LIMIT 6"); while ($row = db_fetch_array($node, MYSQL_NUM)) { $older = $row[nid]; //взима id на 6-ия последно добавен от този вид $older_s = $row[sticky]; } if ($older_s == '1') { db_query("UPDATE {node} SET {sticky} = 0 WHERE nid = $older"); } } }Разработка на сайт с Друпал Разработка на модули за Друпал Drupal.org user