Introduction:
Liferay Search form is Liferay UI component to
design search form in liferay portlet development. This is simple JSTL tag we
can use in JPS pages. In real time when we want implement search feature to
portlet application then we can use the tag.
Generally we will use Search From with Liferay
search container. We will enclose liferay search form in search container so
that when we search data the result can be displayed in the grid.
Go through following link for more about search
container
Liferay
Search Form:
Search form we can enclose in the search container
and it initially display single text box and we can design many input elements
inside search form so that it will be inside toggle. We can open toggle and
close
When we open toggle then we can see all input
elements enclosed by the tag.
The following is declaration and we need pass jsp
path there we will defined all input elements.
<liferay-ui:search-form
page="/html/jsps/student_search.jsp"
servletContext="<%= application %>"
/>
|
Search
form as follows (/html/jsps/student_search.jsp)
<%@ include
file="init.jsp" %>
<%
SearchContainer
searchContainer = (SearchContainer)request.getAttribute("liferay-ui:search:searchContainer");
DisplayTerms
displayTerms = searchContainer.getDisplayTerms();
%>
<liferay-ui:search-toggle
buttonLabel="Student
Search"
displayTerms="<%= displayTerms %>"
id="toggle_id_student_search">
<aui:input label="First
Name" name="firstName"
value="<%=firstName %>" />
<aui:input label="Last
Name" name="lastName"
value="<%=lastName %>" />
<aui:input label="studentAge"
name="studentAge" value="<%= studentAge %>" />
<aui:select name="studentGender">
<aui:option label="Male"
value="1"></aui:option>
<aui:option label="Female"
value="0"></aui:option>
</aui:select>
<aui:input label="studentAddress"
name="studentAddress" value="<%= studentAddress %>" />
</liferay-ui:search-toggle>
|
Note:
We use toggle tag which will wrap the all the input
elements.
Implementing
Search with Search container
Generally in the development we will use search form
with liferay search container and this tag will be enclose by search container
tag one more thing search container tag
should be within form tag.
The
following syntax
<aui:form>
<liferay-ui:search-container/>
<liferay-ui:search-form>
<liferay-ui:search-container-results/>
<liferay-ui:search-container-row/>
<liferay-ui:search-container-column-text/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator/>
</liferay-ui:search-container>
</aui:form>
|
Steps
to implementation:
- Declare from tag with form create search container and its child tags.
- Implement search logic in respective Service Implementation class
- Pass search terms to Service method and fetch the result and pass to search container.
Declare
from tag with form create search container and its child tags.
<aui:form>
<liferay-ui:search-container/>
<liferay-ui:search-form>
<liferay-ui:search-container-results/>
<liferay-ui:search-container-row/>
<liferay-ui:search-container-column-text/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator/>
</liferay-ui:search-container>
</aui:form>
|
Implement
search logic in respective Service Implementation class
Based on search key word we need to implement logic
in respective service implementation class.
Assume we are using Student data so we need to
implement search logic in StudentLocalServiceImpl.java and we need run the
service builder.
In the search we have implemented the Liferay
Dynamic Query API and you can have more knowledge in Liferay wikis or liferay documentation.
The
following is search implementation logic in StudentLocalServiceImpl.java
public class
StudentLocalServiceImpl extends StudentLocalServiceBaseImpl {
public List
getSerachStudents(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch, int start, int end,
OrderByComparator orderByComparator)
throws SystemException
{
DynamicQuery
dynamicQuery = buildStudentDynamicQuery(firstName, lastName, studentAge,
studentGender, studentAddress, andSearch);
return
StudentLocalServiceUtil.dynamicQuery(dynamicQuery, start, end,
orderByComparator);
}
public int
getSearchStudentsCount(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch)
throws SystemException
{
DynamicQuery
dynamicQuery = buildStudentDynamicQuery(firstName, lastName, studentAge,
studentGender, studentAddress, andSearch);
return (int)StudentLocalServiceUtil.dynamicQueryCount(dynamicQuery);
}
protected DynamicQuery
buildStudentDynamicQuery(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch)
{
Junction junction = null;
if(andSearch)
junction = RestrictionsFactoryUtil.conjunction();
else
junction = RestrictionsFactoryUtil.disjunction();
if(Validator.isNotNull(firstName))
{
Property property =
PropertyFactoryUtil.forName("firstName");
String value = (new StringBuilder("%")).append(firstName).append("%").toString();
junction.add(property.like(value));
}
if(Validator.isNotNull(lastName))
{
Property property =
PropertyFactoryUtil.forName("lastName");
String value = (new StringBuilder("%")).append(lastName).append("%").toString();
junction.add(property.like(value));
}
if(studentAge > 0)
{
Property property =
PropertyFactoryUtil.forName("studentAge");
junction.add(property.eq(Integer.valueOf(studentAge)));
}
if(studentGender >
0)
{
Property property =
PropertyFactoryUtil.forName("studentGender");
junction.add(property.eq(Integer.valueOf(studentGender)));
}
if(Validator.isNotNull(studentAddress))
{
Property property =
PropertyFactoryUtil.forName("studentAddress");
String value = (new StringBuilder("%")).append(studentAddress).append("%").toString();
junction.add(property.like(value));
}
DynamicQuery
dynamicQuery = DynamicQueryFactoryUtil.forClass(Student.class,
getClassLoader());
return dynamicQuery.add(junction);
}
}
|
Pass
search terms to Service method and fetch the result and pass to search
container
Search
URL:
We need search URL and it should carry search
container JSP page otherwise it will navigate portlet default view page after
search button click and it is simple liferay render URL.
<liferay-portlet:renderURL varImpl="studentSearchURL">
<portlet:param name="mvcPath"
value="/html/jsps/student_search_container.jsp"
/>
</liferay-portlet:renderURL>
|
In the search form we have toggle open and close
when we open toggle then we will input all search values so that our search
logic fetch the result based on search terms.
We have two kind of search option in toggle one for match
any key word and match all keywords.
Match
ANY we will use OR operator in the search logic
Match
ALL we will use AND operator in search logic
When we open toggle then it wills treats as Advance search and the result should be
fetch based on all columns and its values with operators like AND/OR
based on user input.
If the toggle off then there only input box so that
user can give anything in the box then we will use this key word to search data
on behalf of all columns in the table.
Calling of search method and fetch the data all the
logic should be present inside search-container-result tag.
The
following example code you can understand
<liferay-ui:search-container-results>
<%
DisplayTerms
displayTerms =searchContainer.getDisplayTerms();
if
(displayTerms.isAdvancedSearch()) {
total =
StudentLocalServiceUtil.getSearchStudentsCount(firstName, lastName,
studentAge, studentGender, studentAddress,displayTerms.isAndOperator());
searchContainer.setTotal(total);
searchContainer.setResults(StudentLocalServiceUtil.getSerachStudents(firstName,
lastName,studentAge,studentGender,studentAddress,displayTerms.isAndOperator(),
searchContainer.getStart(), searchContainer.getEnd(), new
StudentNameComparator()));
}else {
String
searchkeywords = displayTerms.getKeywords();
String numbesearchkeywords
=
Validator.isNumber(searchkeywords) ? searchkeywords : String.valueOf(0);
total =
StudentLocalServiceUtil.getSearchStudentsCount
(firstName,lastName,
studentAge, studentGender, studentAddress,displayTerms.isAndOperator());
searchContainer.setResults(StudentLocalServiceUtil.getSerachStudents
(searchkeywords,searchkeywords,Integer.parseInt(numbesearchkeywords),
Integer.parseInt(numbesearchkeywords),
searchkeywords,false,
searchContainer.getStart(), searchContainer.getEnd(),
new StudentNameComparator()));
}
%>
</liferay-ui:search-container-results>
|
Iterator
URL
We already know search container need iterator URL
so that when we change the page it will use Iterator URL.
When we apply search we need to maintain all search
keywords and its values as URL parameters otherwise search result will be
changes.
For each page change it will get the search key
words values from Iterator URL so that it can pass to respective search methods
which are written inside search-container-result tag.
<liferay-portlet:renderURL varImpl="iteratorURL">
<portlet:param name="firstName"
value="<%= firstName %>" />
<portlet:param name="lastName"
value="<%= lastName %>" />
<portlet:param name="studentAge"
value="<%= String.valueOf(studentAge) %>"
/>
<portlet:param name="studentGender"
value="<%= String.valueOf(studentGender) %>"
/>
<portlet:param name="studentAddress"
value="<%= String.valueOf(studentAddress) %>"
/>
<portlet:param name="mvcPath"
value="/html/jsps/student_search_container.jsp"
/>
</liferay-portlet:renderURL>
|
Note:
We already implement search logic in respective
service implementation class.
Complete
code for Example
Search
container JSP page (/html/jsps/student_search_container.jsp)
<%@page import="com.meera.dbservice.model.Student"%>
<%@page import="com.meera.liferaymvc.StudentNameComparator"%>
<%@page import="com.meera.dbservice.service.StudentLocalServiceUtil"%>
<%@ include
file="init.jsp" %>
<a href="<portlet:renderURL
/>">«Home</a>
<div class="separator"></div>
<liferay-portlet:renderURL varImpl="studentSearchURL">
<portlet:param name="mvcPath"
value="/html/jsps/student_search_container.jsp" />
</liferay-portlet:renderURL>
<aui:form action="<%=studentSearchURL
%>"
method="get" name="studentForm">
<liferay-portlet:renderURLParams varImpl="studentSearchURL"
/>
<liferay-portlet:renderURL varImpl="iteratorURL">
<portlet:param name="firstName"
value="<%= firstName %>" />
<portlet:param name="lastName"
value="<%= lastName %>" />
<portlet:param name="studentAge"
value="<%= String.valueOf(studentAge) %>" />
<portlet:param name="studentGender"
value="<%= String.valueOf(studentGender) %>" />
<portlet:param name="studentAddress"
value="<%= String.valueOf(studentAddress) %>" />
<portlet:param name="mvcPath"
value="/html/jsps/student_search_container.jsp" />
</liferay-portlet:renderURL>
<liferay-ui:search-container
displayTerms="<%= new
DisplayTerms(renderRequest) %>"
emptyResultsMessage="there-are-no-students"
headerNames="firstName,lastName,studentAge,
studentGender,studentAddress"
iteratorURL="<%= iteratorURL %>"
>
<liferay-ui:search-form
page="/html/jsps/student_search.jsp"
servletContext="<%= application %>"
/>
<liferay-ui:search-container-results>
<%
DisplayTerms
displayTerms =searchContainer.getDisplayTerms();
if
(displayTerms.isAdvancedSearch()) {
total =
StudentLocalServiceUtil.getSearchStudentsCount(firstName,
lastName,
studentAge, studentGender,
studentAddress,displayTerms.isAndOperator());
searchContainer.setTotal(total);
searchContainer.
setResults(StudentLocalServiceUtil.getSerachStudents(firstName,
lastName,studentAge,studentGender,
studentAddress,displayTerms.isAndOperator(),
searchContainer.getStart(),
searchContainer.getEnd(), new StudentNameComparator()));
}else {
String
searchkeywords = displayTerms.getKeywords();
String
numbesearchkeywords =
Validator.isNumber(searchkeywords) ? searchkeywords :
String.valueOf(0);
total =
StudentLocalServiceUtil.getSearchStudentsCount(firstName,lastName,
studentAge, studentGender, studentAddress,displayTerms.isAndOperator());
searchContainer.setResults(StudentLocalServiceUtil.
getSerachStudents(searchkeywords,
searchkeywords,Integer.parseInt(numbesearchkeywords),
Integer.parseInt(numbesearchkeywords), searchkeywords,false, searchContainer.getStart(), searchContainer.getEnd(), new StudentNameComparator()));
}
%>
</liferay-ui:search-container-results>
<liferay-ui:search-container-row
className="Student"
keyProperty="studentId"
modelVar="currentStudent">
<liferay-portlet:renderURL varImpl="rowURL">
<portlet:param name="backURL"
value="<%= currentURL %>" />
<portlet:param name="mvcPath"
value="/html/jsps/display_student.jsp" />
<portlet:param name="redirect"
value="<%= currentURL %>" />
<portlet:param name="studentId"
value="<%= String.valueOf(currentStudent.getStudentId()) %>" />
</liferay-portlet:renderURL>
<liferay-ui:search-container-column-text
href="<%= rowURL %>"
name="firstName"
property="firstName"
/>
<liferay-ui:search-container-column-text
href="<%= rowURL %>"
name="lastName"
property="lastName"
/>
<liferay-ui:search-container-column-text
href="<%= rowURL %>"
name="studentAge"
property="studentAge"
/>
<liferay-ui:search-container-column-text
href="<%= rowURL %>"
name="studentGender"
value='<%=currentStudent.getStudentGender()==1?"Male":"Female"%>'
/>
<liferay-ui:search-container-column-text
href="<%= rowURL %>"
name="studentAddress"
property="studentAddress"/>
</liferay-ui:search-container-row>
<liferay-ui:search-iterator searchContainer="<%=searchContainer %>"
/>
</liferay-ui:search-container>
</aui:form>
|
Search from JSP(/html/jsps/student_search.jsp)
<%@ include
file="init.jsp" %>
<%
SearchContainer searchContainer =
(SearchContainer)request.getAttribute("liferay-ui:search:searchContainer");
DisplayTerms
displayTerms = searchContainer.getDisplayTerms();
%>
<liferay-ui:search-toggle
buttonLabel="Student
Search"
displayTerms="<%= displayTerms %>"
id="toggle_id_student_search">
<aui:input label="First
Name" name="firstName"
value="<%=firstName %>" />
<aui:input label="Last
Name" name="lastName"
value="<%=lastName %>" />
<aui:input label="studentAge"
name="studentAge" value="<%= studentAge %>" />
<aui:select name="studentGender">
<aui:option label="Male"
value="1"></aui:option>
<aui:option label="Female"
value="0"></aui:option>
</aui:select>
<aui:input label="studentAddress"
name="studentAddress" value="<%= studentAddress %>" />
</liferay-ui:search-toggle>
|
Init.jsp page maintain all Tag lib URL declarations,
Common Imports and Common Variables for all JSP pages
Init.jsp
(html/jsps/init.jsp)
<%@ taglib
uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib
uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib
uri="http://liferay.com/tld/aui" prefix="aui" %><%@
taglib uri="http://liferay.com/tld/portlet"
prefix="liferay-portlet" %><%@
taglib uri="http://liferay.com/tld/security"
prefix="liferay-security" %><%@
taglib uri="http://liferay.com/tld/theme"
prefix="liferay-theme" %><%@
taglib uri="http://liferay.com/tld/ui"
prefix="liferay-ui" %><%@
taglib uri="http://liferay.com/tld/util"
prefix="liferay-util" %>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<%
String currentURL =
PortalUtil.getCurrentURL(request);
String firstName =
ParamUtil.getString(request, "firstName");
String lastName =
ParamUtil.getString(request, "lastName");
int studentAge =
ParamUtil.getInteger(request, "studentAge");
int studentGender =
ParamUtil.getInteger(request, "studentGender");
String
studentAddress = ParamUtil.getString(request, "studentAddress");%>
|
Search
Implementation service class (StudentLocalServiceImpl.java)
package
com.meera.dbservice.service.impl;
import java.util.List;
import
com.liferay.portal.kernel.dao.orm.DynamicQuery;
import
com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import
com.liferay.portal.kernel.dao.orm.Junction;
import
com.liferay.portal.kernel.dao.orm.Property;
import
com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import
com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import
com.liferay.portal.kernel.exception.SystemException;
import
com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.Validator;
import
com.meera.dbservice.model.Student;
import
com.meera.dbservice.service.StudentLocalServiceUtil;
import
com.meera.dbservice.service.base.StudentLocalServiceBaseImpl;
public class
StudentLocalServiceImpl extends StudentLocalServiceBaseImpl {
public List
getSerachStudents(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch, int start, int end,
OrderByComparator orderByComparator)
throws SystemException
{
DynamicQuery
dynamicQuery = buildStudentDynamicQuery(firstName, lastName, studentAge,
studentGender, studentAddress, andSearch);
return
StudentLocalServiceUtil.dynamicQuery(dynamicQuery, start, end,
orderByComparator);
}
public int
getSearchStudentsCount(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch)
throws SystemException
{
DynamicQuery
dynamicQuery = buildStudentDynamicQuery(firstName, lastName, studentAge,
studentGender, studentAddress, andSearch);
return (int)StudentLocalServiceUtil.dynamicQueryCount(dynamicQuery);
}
protected DynamicQuery
buildStudentDynamicQuery(String firstName,String lastName,int studentAge,int
studentGender,String studentAddress,boolean andSearch)
{
Junction junction =
null;
if(andSearch)
junction =
RestrictionsFactoryUtil.conjunction();
else
junction =
RestrictionsFactoryUtil.disjunction();
if(Validator.isNotNull(firstName))
{
Property property =
PropertyFactoryUtil.forName("firstName");
String value = (new StringBuilder("%")).append(firstName).append("%").toString();
junction.add(property.like(value));
}
if(Validator.isNotNull(lastName))
{
Property property =
PropertyFactoryUtil.forName("lastName");
String value = (new StringBuilder("%")).append(lastName).append("%").toString();
junction.add(property.like(value));
}
if(studentAge > 0)
{
Property property =
PropertyFactoryUtil.forName("studentAge");
junction.add(property.eq(Integer.valueOf(studentAge)));
}
if(studentGender >
0)
{
Property property =
PropertyFactoryUtil.forName("studentGender");
junction.add(property.eq(Integer.valueOf(studentGender)));
}
if(Validator.isNotNull(studentAddress))
{
Property property =
PropertyFactoryUtil.forName("studentAddress");
String value = (new StringBuilder("%")).append(studentAddress).append("%").toString();
junction.add(property.like(value));
}
DynamicQuery
dynamicQuery = DynamicQueryFactoryUtil.forClass(Student.class,
getClassLoader());
return
dynamicQuery.add(junction);
}
}
|
Download
Search Container Portlet
Environment:
Liferay
IDE 2.x+Eclipse (Kepler) +Liferay Plugins SDK 6.2+Tomcat 7.x Liferay Portal
Bundle
Deployment
and its Working.
Download portlet you can source or war file to
deploy into liferay portal as your convenient.
Once portlet successfully deployed drag the portlet
in any desired page. Portlet is available in sample category.
In the portlet page you can click on Student Search link then you can
see the search container with search from.
Portlet
Screens:
Default
Page
Search
Page
Search
with toggle advanced search
Reference
Links
Author
Can these search work for all values in next pagination too.
ReplyDeleteIt can be easy to lose sight of the very reasons why you wanted to open your business startup. You can get wrapped up in the day-to-day operations, leaving little time to focus on what makes your business startup standout in the market. Having a strategy in place that allows you to keep you motivated can ensure your business stays on a path of success Business Listing New York
ReplyDeleteI am impressed. I don't think Ive met anyone who knows as much about this subject as you do. You are truly well informed and very intelligent. You wrote something that people could understand and made the subject intriguing for everyone. Really, great blog you have got here. Europa-Road vasúti szállítmányozás
ReplyDeleteStarting a small business or a home-based business is not something that should be entered into lightly. More often than not you'll go through a long period languishing while trying to make your business viable best public adjusters
ReplyDeleteBusiness coaching can actually bring the much-desired changes to your business. Coach is a word which is derived from "kocsi", a Hungarian name that means "carriage". Today, however, the word has a wider use and it basically means transportation of people from one point to the other where they desire to be مصور فوتوغرافي
ReplyDeleteIt can be easy to lose sight of the very reasons why you wanted to open your business startup. You can get wrapped up in the day-to-day operations, leaving little time to focus on what makes your business startup standout in the market. Having a strategy in place that allows you to keep you motivated can ensure your business stays on a path of success Carbon dioxide
ReplyDeleteThis ought to be close to 60 letters and it doesn't need to bode well. For instance the landing page of a website architecture organizations meta title may peruse "Website composition Nottingham - Web Design | Web Designers" or something along that impact. It isn't exactly justifiable or a sentence yet a search engine would see this and comprehend they are expressions of significance and what is the issue here. Wat is leadgeneratie
ReplyDeleteI have recently started a blog, and the info you offer on this website has helped me greatly. Thanx for all of your time & work. 온라인바카라
ReplyDeleteBuilding a business requires considerable time and effort, and how do you maintain your business legacy? Read on to learn how you can help protect your business in the future through business succession planning Personal assistant services
ReplyDeleteI loved as much as you will receive carried out right here. The sketch is tasteful, your authored subject matter stylish. nonetheless, you command get got an nervousness over that you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly very often inside case you shield this hike. 파워볼 알고리즘
ReplyDeleteThis design is steller! You most certainly know how to keep a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Wonderful job. I really loved what you had to say, and more than that, how you presented it. Too cool! 오토 파워볼
ReplyDeleteWhat is the truth about owning, starting, and building a home-based business? In this review we will examine the advantages and disadvantages in addition to some tips and hints. Success in this type of business requires self-discipline and self-motivation, you are your own boss. Is owning a home-based business worth the stress and challenges of working for yourself and making a significant amount of residual and passive income? Freedom Insurance
ReplyDeleteA business blueprint provides vision, structure and general form. It's a useful framework, providing structure, direction and purpose, while leaving plenty of room to shift and create over time. Here are some key components of a business blueprint that can serve as the foundation for your developing business. 101 Bio
ReplyDeleteDo you want to improve the performance of your business? Of course you do! Maybe you're unsure where to start, or how to go about it. This checklist of questions will give you a good overview of your business's strengths, weaknesses and areas that need improvement. You may find some of them tough - or a little confronting - but be honest! The path to improving your business performance starts today. DUI Attorney Vancouver WA
ReplyDeletehttps://dynamichealthstaff.com/nursing-jobs-in-canada-for-indian-nurses In this contemporary world, it has become liable to access each and everything with modern technologies; therefore, gaming peripherals are the best gaming devices which comfort the gamers who love to play the ideal games with easy and accessible device to play their skills. Similarly I would like to enhance my gaming skills with the best gaming devices in the future as well. However, there are innumerable gaming devices but some of the most colossal of them I have spotlighted below which can enhance the best gaming skills in the 2018 without any atoms of doubt.
ReplyDeleteWhen you think of starting a business, the first thing that comes to mind is money/capital. Of course, you need money to start a business, even if it is very little considering the fact how easy it is to start a business in the digital age a course in miracles
ReplyDeleteSo you have an affiliate business but it's not really delivering. You persist anyway out of stubbornness to all those people who told you to give up! In the back of your mind you catch yourself thinking "Am I wasting my time with this?". landscape supplies
ReplyDeleteA business blueprint provides vision, structure and general form. It's a useful framework, providing structure, direction and purpose, while leaving plenty of room to shift and create over time. Here are some key components of a business blueprint that can serve as the foundation for your developing business. cek resi jnt
ReplyDeletehttps://onohosting.com What Is SEO? This is a common question that most people especially those who are either new or not familiar with online marketing might be asking. SEO stands for search engine optimization.
ReplyDeleteاذا كنت تبحث عن ماكينات تعبئة بقوليات فلن تجد ماكينات افضل من المصنعة لدي شركة ماستر تك فستجد ان جميع مكن التعبئة والتغليف مصنع بالكامل من الاستانلس ستيل القوي المقاوم للصداء
ReplyDeleteعملية علاج الدوالي بالليزر من اشهر العمليات لعلاج الدوالي حيث انها لا يتم استخدام فيها اي ادوات جراحية ولهذا لا يشعر المريض ب الم او اثر علي الجلد نتيجة العملية
ReplyDeleteتساعدكبسولة المعدة في مصر المريض علي فقد 15- 20 كيلو جرام من الوزن فى خلال أربعه أشهر والجدير بالذكر انها تتم بدون منظار او جراحة أو تخدير وبذلك لن يحتاج المريض الي المكوث فى المشفى او حتي يتبع نظام غذائى قاسي
ReplyDeleteعتقد البعض أن استخدام نوع واحد من الاضاءة في المنزل او المكتب أمر كافي ، وهذا أمر غير صحيح بالمرة، فأكد خبراء الاضاءة حول العالم علي أن لكل نوع منهم استخدام وغرض مختلف عن الاخر.لذلك يهتم مصنع المصرية السعودية باعتباره واحد من افضل مصانع لمبات ليد في مصر بامداد العملاء بالمعلومات اللازمة عن انواع الاضاءة المختلفة وكيفية استخدامها في البيت بشكل صحيح
ReplyDeleteAmr Helmy Company is a major kitchen companies in sheikh zayed offering the latest modern kitchen design ideas, different shapes of units and shelves made of the latest anti-moisture and scratch-resistant kitchen materials, distinctive kitchen decorations harmonious with kitchen floor materials, innovative designs for small, medium and large spaces.
ReplyDeleteيوجد أنواع كثيره من المبيدات التي يمكن ان نساخدمها للفضاء علي الصراصير، منها ما هو على شكل طعوم، والبعض الآخر يكون بشكل سائل، يتم توزيعها على المناطق التي تتواجد فيها الصراصير في المطبخ، كمنطقة خلف الثلاجة، وتحتها، وفي خزائن المطبخ وزواياها، وخلف الغسالة، فتأتي الصراصير لحمل الطعم إلى أعشاشها، مما يتسبب بإصابة بقية الحشرات الأخرى ومن الافضل الاعتماد علي المركز الالماني لانه يستخدم طرق التخلص من الحشرات المنزلية.
ReplyDelete