Posted by mehotkhan on November 21, 2013 at 7:35pm
سلام ،دوستان من یه مشکل برخوردم
توی بخشی از سایتم یه ویوو ساختم که مقدار یه محتوا رو به شرطی که تیک "تیتر 1" زده باشه نشون میده ، و فقط یه آیتم رو نشون میده
مشکل من اینجاست که می خوام اون محتوایی که که دیگه توی این ویوو نشون داده نمیشه رو اتوماتیک تیک "تیتر 1 " غیر فعال بشه
چطوری میتونم این کار رو انجام بدم ؟
مرسی
Comments
Views Prebuild Hook
Your prefered way (on your view callbacks)
<?php
function yourmodule_views_prebuild ($view){
//dsm($view);
if ($view->name == "your_view_name"){
$lastNid = $view->result[0]->nid;// if view has only one result
setToZero = db_update('field_data_yourfieldname');
setToZero->fields(array('yourfieldname_value' => 0));
setToZero->condition("field_data_yourfieldname",0,"<>");
setToZero->condition("entity_id",$lastNid,"<>");
setToZero->execute();
}
return $view;
}
?>
Another way on node save (more performant):
<?php
function yourmodule_node_presave($node){
$isZero = $node->yourfieldname['und'][0]['value'];
$nodeID = $node->nid;
if ($isZero != '0'){
setToZero = db_update('field_data_yourfieldname');
setToZero->fields(array('yourfieldname_value' => 0));
setToZero->condition("field_data_yourfieldname",0,"<>");
setToZero->condition("entity_id",$nodeID,"<>");
setToZero->execute();
}
}
?>
مرسی ، این فانشن رو کجا باید
مرسی ، این فانشن رو کجا باید قرار بدم ؟
خیلی وارد نیستم به مباحث ویوو
yourmodule
باید یه ماژول درست کنید به اسم
yourmodule
یا هر اسم دیگری
مقدار
your_view_name
رو به اسم ماشینی ویوتون تغییر بدین
مقدار
yourfieldname
رو به اسم ماشینی فیلدتون تغییر بدین
دوستان کسی یه راهنمایی کنید
دوستان کسی یه راهنمایی کنید چطوری این کد رو قرار بدم توی سایت
سپاس فراوان
bayad ye module custom
bayad ye module custom besazin va in function ro tuye un garar bedin
من الان یه ماژول ساختم ، کد
من الان یه ماژول ساختم ، کد ها رو هم قرار دادم ، ولی کد ها خطا میگیره ، کلا با فعال کردنش سایت از کار می افته ،
محتوای فایل FirstTitle.module
<?php
function FirstTitle_views_prebuild ($view){
if ($view->name == "first_title"){
$lastNid = $view->result[0]->nid;// if view has only one result
setToZero = db_update('field_data_field_first_title');
setToZero->fields(array('field_first_title_value' => 0));
setToZero->condition("field_data_yfield_first_title",0,"<>");
setToZero->condition("entity_id",$lastNid,"<>");
setToZero->execute();
}
return $view;
}
?>
محتوای فایل FirstTitle.info
name = "First Title"
description = "create first title section dynamicly"
core=7.x
package = "Other"
files[] = FirstTitle.module
version = "7.x-1.0"
core = "7.x"
کجای کارم مشکل داره ؟
<?phpsetToZero->condition("fi
<?php
setToZero->condition("field_data_yfield_first_title",0,"<>");
?>
yfield => field
<?php
setToZero->condition("field_data_field_first_title",0,"<>");
?>
کد زیر رو داخل فایل
index.php
دروپال قرار بدید تا ارورها نمایش داده بشن
https://drupal.org/node/1056468
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
?>
سپاس فراوان بابت اینکه همراه
سپاس فراوان بابت اینکه همراه هستید
کاری که گفتید رو انجام دادم ولی کلا توی ادیتور هم سینتاکس ارور میده ، توی خطاهای دروپال هم همینطور
تصویر زیر رو ببینید :
ارور زیر هم توی ایندکس میگره ، همون کدی که گفتید رو گزاشتم
Parse error: syntax error, unexpected '=' in public_html/sites/all/modules/FirstTitle/FirstTitle.module on line 7
توی نت هم سرچ کردم ، چیزی نتونستم پیدا کنم که مشکل رو رفع کنم
مرسی از راهنماییتون
lol shoma chand vagte php kar
lol shoma chand vagte php kar mikonid ?
tu php variable ha ba $ shuru mishan :D
setToZero --> $setToZero
آقا من همه این کارها رو کردم
آقا من همه این کارها رو کردم ولی با جواب نداد !
با روش دوم هم رفتم ، ولی موقع ذخیره محتوا که تیک تیتر 1 زده باشه ، اروز میده :
وب سایت با یک خطای غیر منتظره مواجه شد. لطفا بعدا دوباره تلاش کنید.
این کدها رو گزاشتم توی ماژول
<?php
function FirstTitle_node_presave($node){
$isZero = $node->field_first_title['und'][0]['value'];
$nodeID = $node->nid;
if ($isZero != '0'){
$setToZero = db_update('field_data_field_first_title');
$setToZero->fields(array('field_first_title_value' => 0));
$setToZero->condition("field_data_field_first_title",0,"<>");
$setToZero->condition("entity_id",$nodeID,"<>");
$setToZero->execute();
}
}
?>
چرا جواب نمیده ؟ :(
از لحاظ ساینتکسی به جز موردی
از لحاظ ساینتکسی به جز موردی که دوستمون اشاره کردن درباره دالر ساین به نظر نمیاد مشکل دیگه ای باشه
دقت کنید که نام جدول تو دیتابیس دقیقا همین نامی که توی ماژول هست باشه با پی اچ مای ادمین میتونید چک کنید.
لطفا این کد را تست کنید.
لطفا این کد را تست کنید. البته ظاهرا مشکل جزیی وجود دارد و این که هر بار نود را ذخیره می کنید باید کش دروپال را پاک کنید. شاید راه حلی برای آن پیدا شود.
<?php
/**
* Implements hook_node_presave().
*/
function titr1_node_presave($node) {
//your boolean field name
$field_name = 'field_titr_1';
//on value
$on_value = 1;
//off value
$off_value = 0;
if (isset($node->$field_name)) {
$field = $node->$field_name;
if (isset($field['und'][0]['value'])) {
$field_value = $field['und'][0]['value'];
if ($field_value == $on_value) {
$table_name = "field_data_{$field_name}";
$table_field_name = "{$field_name}_value";
$transaction = db_transaction();
try {
$q = db_update($table_name)
->fields(array(
$table_field_name => $off_value,
))
->condition($table_field_name, $on_value)
->condition('entity_id', $node->nid, "<>");
$q->execute();
db_ignore_slave();
}
catch (\Exception $e) {
$transaction->rollback();
watchdog_exception('Titr 1', $e, NULL, WATCHDOG_ERROR);
drupal_set_message('error', 'error');
return FALSE;
}
}
}
}
}
?>
Visit my website @ http://www.hejazee.ir/
Learn computer science @ http://www.tolooco.com/