aftamat4ik

Рейтинг
55
Регистрация
05.01.2012
Интересы
php + Drupal
программист недосамоучка

Спасибо) Начал читать примеры) А еще вариантов нет? Ну чтобы избежать копирования? Или это непобедимо? Знаю ведь что можно хД

Здравствуйте. Мучаюсь над автоматическим добавлением материалов.

Материал имеет 3 доп поля. Одно из полей - поле с картинкой.

Теперь смотрим на код:


$file = (object) array(
‘uid’ => $i ,
‘uri’ => $file_path,
‘filemime’ => file_get_mimetype($filepath),
‘status’ => 1,
);
$file = file_copy($file, “public://”);
$node->field_image[LANGUAGE_NONE][0] = (array)$file;

Что делает функция file_copy? - она копирует файл из папки модуля в папку /sites/all/default/files

и добавляет в базу данных запись о файле

Так вот у меня 1753 файлов картинок, общим размером 70+ мегабайт. Как вы представляете процесс установки такого модуля на слабенький виртуальный хостинг. Копирование ПАКА файлов - это пол часа работы процессора на хостинге. Например на sweb доступно только 30 секунд для процесса! Если дольше - завершается принудительно. И вот представьте пользователь моего модуля решил его установить себе - и получил такой косяк. Я не хочу чтобы меня материли...

Поэтому вместо file_copy($file, “public://”); я пишу так:


$file_patch = drupal_get_path('module', 'rmodule') . "/ПАПКА с КАРТИНКАМИ".$artist['img_url'];
$file = (object) array(
'uid' => 1,
'status' => 1
);
global $user;
$file = new stdClass;
$file->uid = $user->uid;
$file->filename = basename($file_patch);
$file->uri = $file_patch;
$file->filemime = file_get_mimetype($file_patch);


$file = file_save($file);
file_usage_add($file, 'rmodule', 'node', 1);


$node->author_image[LANGUAGE_NONE][0] = array(
'fid' => $file->fid
);

То есть $file = file_save($file); file_usage_add($file, 'rmodule', 'node', 1);

-это добавляет файл в бд и возвращает его fid и прочее, что позволяет заполнить поле $node->author_image

Вроде все красиво, НО. Картинки в нодах не отображаются, Вместо того чтобы отдать урл до картинки вот что выводит друпал:

http://test1.ru/sites/default/files/styles/medium/public//sites/all/modules/rmodule/images/th/rafile4dc0cf3e5bedc2023de27b1195affcb0.jpg

-это урл картинки.

http://test1.ru/sites/default/files/styles/medium/public/ - ЛЕВОЕ ВАЩЕ, оно мне не нужно нафик, его дам друал подставил, и я никак это не могу выпилить, я даже через

_/sites/all/modules/rmodule/images/th/ - нормальный путь картинки

hook_page_view_alter и hook_node_view_alter пытался - не выпиливается блин! НУ НАФИГА ему такой механизм, я что обязан все файлв в папку public:// совать чтоли? А если это НЕПРИЕМЛИМО!

В моей ситуации копирование файлов из папки в папку не приемлимо, но блин и обойти никак не выходит.

Ребята подскажите что делать.

Вот коды хука node_view_alter:


function rmodule_node_view_alter(&$build){
$node = $build['#node'];

if($node->type == "author_page"){
$build['author_image']['#items'][0]['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//НЕ ВЫПИЛИВАЕТ, хотя урл меняется
$build['author_image'][0]['#item']['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//НЕ ВЫПИЛИВАЕТ
$build['author_image'][0]['#item']['path'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//ТО-ЖЕ САМОЕ бблин((

$build['body']['#object']->author_image['und'][0]['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];
}
}


---------- Добавлено 06.02.2013 в 16:28 ----------

Так тоже не катит:


function rmodule_node_view($node, $view_mode, $langcode){
if($node->type=='author_page'){

$node->content['author_image'][0]['#item']['uri'] = "123";

Вывод такой: http://test1.ru/sites/default/files/styles/medium/public/123

А надо просто 123...

Все вкурил, спасибо хД) Я думал что перед названием кастомного поля надо написать field_ вот так примерно $node->field_author_janre - это не работает.

Зато так $node->author_janre работает) Сам короче себя же и замудрил.

---------- Добавлено 03.02.2013 в 11:37 ----------

Pavel_:
нашелся один автор, который копировал статьи с других сайтов

О морали надо в другой теме рассуждать имхо) И не с сайта а из .csv файла.

strip_tags($spasennaja_fignja,"<p><span><a>");

К слову иногда левые <div> выдает word редактор. Если ваш автор писал в ворде и копировал в jce например - то вот и корень косяка.(Было дело на джумле раньше)

Здравствуйте. Я пытаюсь создать ноду программными средствами(drupal7).

Вот код:


$node = new stdClass();
$node->type = 'author_page';//машинное имя типа материала(см .install файл модуля)
node_object_prepare($node);

$node->title = "The Title";//$artist['title'];
$node->language = LANGUAGE_NONE;

// Добавляем текст материала
$node->body[$node->language][0]['value'] = "<p>TEXT OF NODE</p>";//$artist['text'];
$node->body[$node->language][0]['summary'] = text_summary("<p>TEXT OF NODE</p>");//text_summary($artist['text']);
$node->body[$node->language][0]['format'] = 'filtered_html';
//добавляем поле картинки
$file_path = drupal_get_path('module', 'rmodule') .'/images/th/rafile9cc75a85346ff6fd41e2799d18a2eaa5_prop_158x158.jpg'; // Create a File object

$node->field_author_image[LANGUAGE_NONE][0] = array(
'alt' => "Описание",
'title' => "Заголовок",
'uid' => '1',
'filename' => $file_path,
'uri' => $file_path,
'filemime' => file_get_mimetype($file_path),
'status' => '1',
);

$node->field_author_name['und'][0]['value'] = "Имя Автора";//$artist['title'];
$node->field_author_janre['und'][0]['value'] = "Жанр";//$artist['janre'];

node_submit($node);
node_save($node);

Но к сожалению не выходит. Добавляется материал с заголовком The Title и контентом, НО дополнительные поля author_name и author_janre, а так-же поле с картинкой - пустуют. Кто-нибудь может подсказать в чем дело? Рою буржунет, пока ничего дельного не нарыл(

В общем если кому интересно - в базе данных создается таблица xmlsitemap, в которую мы можем в ручную требуемые значения засунуть сами хД И не надо всякие там АПИ пилить...

---------- Добавлено 14.01.2013 в 20:49 ----------

Хотя нет, все не совсем так. Вот моя реализация:


//Получаем последний ид элемент а в таблице xmlsitemap
$qw = "SELECT `id` FROM {xmlsitemap} ORDER BY `id` DESC LIMIT 1";
$data = db_query($qw);
$str_val = $data->fetchAssoc();

$link = array(
'id'=>($str_val['id'] + 1),
'type'=>'custom',
'loc'=>'rm/Кипелов',
'language'=>'und'
);

xmlsitemap_link_save($link);

Drupal 7 Добавляем из стороннего модуля ссылку в карту сайта))

Pavel_:
Когда-то ставил xmlsitemap для мультисайтинга - дык там была опция добавления вручную любого стороннего пути файла без проблем... ))

Да есть такая) Но надо из модуля все это добавлять а не руками) я ж не мазохист в конце концов хДД

Уважаемый форумчане. У Drupal есть модуль - XML Sitemap, кому интересно вот ссылка на скачку - http://drupal.org/project/xmlsitemap

Этот модуль формирует отличную карту сайта и очень многие(почти все) его ставят. В общем требуется из Стороннего модуля добавить в карту сайта ссылку. На идею как это сделать меня натолкнул вот этот линк: http://drupal.stackexchange.com/questions/16627/how-can-my-module-add-xml-sitemap-entries

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

Пока в голову приходит только это(но не пашет):


$link = array(
"loc"=>$url,
"type"=>"custom"
);

http://www.torrentino.com/torrents/678314 - ежели кто будет нормальную ссылку искать на эту книгу, то тут она. На англ по моему, но это не проблема, зато честно хД

Так там так и написано:


Implementation of hook_schema() in Form Messages Module’s formmsgs.install File
<?php
/**
* @file
* DB schema, install, and uninstall functions for AJAX Form Messages.
*
* The entity base table is defined here.
*/

/**
* Implements hook_schema().
550 CHAPTER 24 WRITING A MAJOR MODULE
*/
function formmsgs_schema() {
$schema = array();
$schema['formmsgs'] = array(
'description' => 'Stores information about all formmsgs entities.',
'fields' => array(
'fmid' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Primary Key: Unique form message ID.',
),
'name' => array(
'description' => 'The machine-readable name of the form message.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
),
'label' => array(
'description' => 'The human-readable name of this form message.',
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
'default' => '',
),
'status' => array(
'description' => 'Boolean indicating whether the form message is active.',
'type' => 'int',
'size' => 'tiny',
'not null' => TRUE,
'default' => 1,
),
) + entity_exportable_schema_fields(),
'primary key' => array('fmid'),
'unique keys' => array(
'name' => array('name'),
),
);
return $schema;
}

Бло, по ходу модулю надо таки функцию удаления прописать...

Plazik:
Почитайте книгу CMS Drupal 7. Руководство по разработке системы управления веб-сайтом

Ща скачаю, спасибо)

А нифига, скачать эту самую книжку на халяву оказываться не получится(( Везде куда не плюнь все ссылки ведут на лохотрон и разводилово. Я конечно понимаю - люди бабло делают, но не так же бессовестно то. Тем более кому как не веб мастеру знать все эти уловки. В общем копаю дальше)

https://www.google.ru/search?q=CMS+Drupal+7.+%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE+%D0%BF%D0%BE+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%BC&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a#q=cms+drupal+7.+%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE+%D0%BF%D0%BE+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%BC+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE&hl=ru&newwindow=1&client=firefox-a&tbo=d&rls=org.mozilla:ru:official&ei=FO7nUILRAqWO4gTOx4G4Bw&start=0&sa=N&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.1355534169,d.bGE&fp=8009d268bf6c1d76&bpcl=40096503&biw=1366&bih=661

Здравствуйте. В общем для осуществления одной весьма дельной задумки требуется создать в базе данных Drupal 7 таблицу. Я в этом не очень разбираюсь, в общем исходя из папки с примерами написания модулей получился такой код:


function rmodule_schema() {
$schema['rmodule_users'] = array(
'description' => t('Индекс'),
'fields' => array(
'rid' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Primary Key',
),
'track_list' => array(
'type' => 'text',
'not null' => TRUE,
'default' => '',
'description' => 'Name of the person.',
),
),
'primary key' => array('pid'),
'indexes' => array(
'track_list' => array('track_list'),
),
);

return $schema;
}

Это дело было добавлено в файл .install самого модуля. После чего я удалил строчку описывающую модуль из таблицы SYSTEM и модуль переустановил. Но таблица не создалась( Что я не так делаю?

---------- Добавлено 04.01.2013 в 23:03 ----------

drupal_install_schema('rmodule_users'); в hook_init тоже не помогает(...

---------- Добавлено 04.01.2013 в 23:05 ----------

кеш чистил)

---------- Добавлено 04.01.2013 в 23:18 ----------

Нет я конечно и от руки это сделать могу, но ежели кто другой захочет использовать модуль - каково ему будет, и сколько на меня после этого матов снизойдет... К слову сказать модуль из админки не удаляетя, даже если его отключить(странно...) Поэтому приходиться из таблицы system его выпиливать - но судя по всему это не помогает)

Вот сколько в интернете инструкций по работе с базой данных drupal 7, по выборке, по сортировке и прочему, а про создание таблицы молчат... Или это как говорил наш препод по алгему - "Элементарно". Что подразумевает под собой - сложно но я знаю ответ, а ты никогда не догонишь)

Всего: 143