[ Решено ] Автоматическое заполнение поля уникальным номером фотографии в галерее

Главные вкладки

Аватар пользователя Users681 Users681 4 октября 2014 в 21:41

Приветствую друзья.

Столкнулся с проблемой автоматического заполнения поля, при создании ноды. Есть: тип материала - фотография. При создании ноды этого типа, необходимо что бы поле порядковый номер фотографии заполнялось автоматически, и было уникальным в рамках всех полей этого типа. Например при создании ноды с фотографией, ей должен присвоиться номер 001-01, а при создании другой ноды уже 001-02 например. Т.е. все время должно подставляться уникальное значение в поле.

Есть ли готовое решение для такой задачи? Заранее благодарен за помощь!

Комментарии

Аватар пользователя kv4 kv4 4 октября 2014 в 21:55

А номер материала nid - не то?

UPD: наверное не то.

Может номера просто выводить, когда фотки выводятся?
Это можно с помощью views сделать... зачем хранить номера?

Аватар пользователя Users681 Users681 4 октября 2014 в 22:33

На сайте 3500 фотографий моделей мебели. Человек звонит и говорит, сколько стоит модель MB 008-76. Как найти, что он хочет? Или этот же человек, записал номер модели, а через неделю пришел, и хочет ее снова посмотреть. Ему снова лопатить 3500 фоток?

Аватар пользователя kv4 kv4 4 октября 2014 в 22:39

Ну может быть вам поможет модуль https://www.drupal.org/project/auto_nodetitle

Не пользовался им, но вроде бы написано, что он именно этим и занимается - создаёт автоматические названия у нод.

Почитайте про модуль https://www.drupal.org/project/token и возможно вам станет понятно, что делать.

А для поиска https://www.drupal.org/project/views

Аватар пользователя Users681 Users681 4 октября 2014 в 22:59

"ХулиGUN" wrote:
Зачем использовать какое-то странное никому ненужное поле "уникальный номер фотографии"? ID материала итак будет уникальным... и поиск по нему можно сделать и всё что угодно

ХулиGUN, подскажите как проще автоматом подтянуть в поле создаваемой ноды id-шник..?

Аватар пользователя kv4 kv4 5 октября 2014 в 9:41

"Users681" wrote:
ХулиGUN, подскажите как проще автоматом подтянуть в поле создаваемой ноды id-шник..?

"kv4" wrote:
Ну может быть вам поможет модуль https://www.drupal.org/project/auto_nodetitle
Не пользовался им, но вроде бы написано, что он именно этим и занимается - создаёт автоматические названия у нод.
Почитайте про модуль https://www.drupal.org/project/token и возможно вам станет понятно, что делать.
А для поиска https://www.drupal.org/project/views

А чем этот вариант не устраивает?

Аватар пользователя kv4 kv4 5 октября 2014 в 13:55

"ХулиGUN" wrote:
1. Лишние модули

А какие тут лишние модули?

https://www.drupal.org/project/auto_nodetitle - этот?
Ну так, если автор не знает о том, что у нод есть уникальный ID - думаю этот модуль ему будет не лишним.

Или этот - https://www.drupal.org/project/views ?

"Users681" wrote:
На сайте 3500 фотографий моделей мебели. Человек звонит и говорит, сколько стоит модель MB 008-76. Как найти, что он хочет? Или этот же человек, записал номер модели, а через неделю пришел, и хочет ее снова посмотреть. Ему снова лопатить 3500 фоток?

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

"ХулиGUN" wrote:
2. Поиск по integer значительно быстрее поиска по string

Вот для этого конкретного случая, считаю что экономия на спичках. Поле title в таблице node - индексируется. И поиск по индексированному текстовому полю среди 3500 записей вряд-ли будет по скорости существенно отличаться от поиска по числовому полю (имею ввиду по ощущениям пользователя, ищущего на сайте).

Вообще наверное круто, когда ты на всё пишешь собственное супермегабыстроерешение и никогда не пользуешься готовыми. С этим не поспоришь. Но вот конкретная задача решается установкой трёх модулей, и не нужно писать ни одной строчки кода (а для ТС, написание даже нескольких строк, мне кажется это довольно не тривиальная задача).

На всякий случай проверил время выполнения запроса, на ~9000 записей в таблице node.

SELECT *
FROM  `node`
WHERE  `title` LIKE  '%Адрес%'
LIMIT 0 , 30

Отображение строк 0 - 3 (4 всего, Запрос занял 0.0367 сек.)

SELECT *
FROM  `node`
WHERE  `nid` =2298
LIMIT 0 , 30

Отображение строк 0 - 0 (1 всего, Запрос занял 0.0003 сек.)

SELECT *
FROM  `node`
WHERE  `title` LIKE  'Автокредит'
LIMIT 0 , 30

Отображение строк 0 - 0 (1 всего, Запрос занял 0.0003 сек.)

Хм, похоже ХулиGUN прав. Скорость поиска неполного совпадения строки по текстовому полю, для мебельного магазина неприемлема - 0.0367 сек. С другой стороны, если искать по числовому полю, то скорость выполнения запроса вполне пригодная - 0.0003 сек.

Ну, против фактов не попрёшь.

Аватар пользователя Users681 Users681 5 октября 2014 в 14:11

Ребята. Спасибо что ответили и дали такого масштаба советы!

"kv4" wrote:
А чем этот вариант не устраивает?

Видел этот модуль и буду его пробовать, просто думал что может есть что то подобное для обычного поля. Что касается привязки nid ноды, так тоже буду пробовать мудрить, но если придется писать код, могу просто не справиться, по этому сразу и спросил про готовое решение. Если подскажите краткий алгоритм организации вывода nid через views и организации поиска по нему, буду благодарен.

Аватар пользователя kv4 kv4 5 октября 2014 в 14:33

"Users681" wrote:
Если подскажите краткий алгоритм организации вывода nid через views и организации поиска по нему, буду благодарен.

Оно тебе надо?

Заплати денег за работу кому-нибудь, и не грей голову. Всё равно ничего хорошего из этого в ближайшее время не получится.

А вообще, https://www.drupal.org/project/auto_nodetitle - этот модуль использует токены - это то, что содаёт вот этот модуль https://www.drupal.org/project/token.

Наверное когда ты установишь auto_nodetitle, в админке где-нибудь будет страница настройки с текстовым полем, в которое нужно будет прописать что-то вроде: "Супер шкаф - МТ[node:nid]", где [node:nid] - это заменитель, для идентификатора ноды. Во время сохранения ноды, вместо этого заменителя будет подставлен nid.

Для поиска, устанавливаешь модуль views, создаёшь новое представление. Настраиваешь нужный тебе вывод материалов, путь страницы на которой это всё будет показываться, фильтры (которые там же в настройка делаешь отображаемыми для пользователя). Фильтр делаешь по полю title материала. Поле можно сделать просто текстовым, или поле с автозаполнением.

Но для начала, почитай что-нибудь об этом, например тут https://www.google.ru/search?q=drupal+views+how+to&oq=drupal+views+how&a... или тут https://www.google.ru/search?q=drupal+views+how+to&oq=drupal+views+how&a...

Аватар пользователя Users681 Users681 7 октября 2014 в 18:24

В общем решилось так: тип материала - фотография. Одно фото - одна нода. Группировка происходит по словарям через раскрытые фильтры views. Возле каждой фотографии выводится уникальный nid. По нему ищет великолепно! И все работает. Так что задача решена! Но остался один непонятный момент. Если я хочу реализовать не просто подстановку nid к каждой фотке, а например MB-nid, как реализовать раскрытый фильтр так, что бы искало (фотку/модель) не просто по nid, т.е. по числу в форме поиска, а по связке MB-nid, т.е. например MB-10 или MB-36. Чувствую что реализуется просто, но понять не могу где... Если кто подскажет, буду благодарен! Но в целом вопрос решен, спасибо сообществу!

Аватар пользователя kv4 kv4 8 октября 2014 в 7:20

"Users681" wrote:
Если я хочу реализовать не просто подстановку nid к каждой фотке, а например MB-nid, как реализовать раскрытый фильтр так, что бы искало (фотку/модель) не просто по nid, т.е. по числу в форме поиска, а по связке MB-nid, т.е. например MB-10 или MB-36. Чувствую что реализуется просто, но понять не могу где... Если кто подскажет, буду благодарен! Но в целом вопрос решен, спасибо сообществу!

Русским по белому писал:

"kv4" wrote:
Наверное когда ты установишь auto_nodetitle, в админке где-нибудь будет страница настройки с текстовым полем, в которое нужно будет прописать что-то вроде: "Супер шкаф - МТ[node:nid]", где [node:nid] - это заменитель, для идентификатора ноды. Во время сохранения ноды, вместо этого заменителя будет подставлен nid.
Для поиска, устанавливаешь модуль views, создаёшь новое представление. Настраиваешь нужный тебе вывод материалов, путь страницы на которой это всё будет показываться, фильтры (которые там же в настройка делаешь отображаемыми для пользователя). Фильтр делаешь по полю title материала. Поле можно сделать просто текстовым, или поле с автозаполнением.

Аватар пользователя Users681 Users681 30 ноября 2014 в 21:02

Решение, если нужно вывести именно в поле - viewsfield. Если нужно автоматом подставить значение в title то - Automatic Entity Label, т.к. auto nodetitle работает не стабильно!